linux進程建立經常使用函數

獲取進程ID數組

#include <sys/types.h>
#include <unistd.h>

pid_t getpid(void)
//獲取本進程ID

pid_t getppid(void)
//獲取父進程ID

建立子進程

#include<unistd.h>

pid_t fork(void)

//功能:建立子進程
//fork調用一次,卻返回兩次,有三種不一樣的返回值
//1.父進程中,fork返回新建立的子進程的PID
//2.子進程中,fork返回0
//3.若是出現錯誤,fork返回一個負值
//注意:使用此函數建立的子進程,其數據空間、堆棧空間都會
//從父進程獲得一個拷貝,而不是共享

#include <sys/types.h>
#include <unistd.h>

pid_t vfork(void)

//功能:建立子進程

vfork和fork建立子進程的 區別

  • fork: 子進程拷貝父進程的數據段
  • vfork: 子進程與父進程共享數據段

  • fork: 父、子進程的執行次序不肯定
  • vfork: 子進程先運行,父進程後運行

exec函數族函數

exec用被執行的程序替換調用它的程序。命令行

與fork區別:fork建立一個新的進程,產生一個新的PID,exec啓動一個新程序,替換原有的進程,所以進程的PID不會改變。指針


execlcode

#include <unistd.h>

int execl(const char *path, const char *arg1,...)
//參數說明:
//path:被執行的程序名(含完整路徑)
//arg1-argn:被執行程序所需的命令行參數,含程序名。以空指針(NULL)結束

execlp

#include <unistd.h>

int execlp(const char *path, const char *arg1,...)
//參數說明:
//path:被執行程序名(不含路徑,將從path環境變量中查找該程序)
//arg1-argn:被執行程序所需的命令行參數,含程序名。以空指針(NULL)結束

execv

#include <unistd.h>

int execv(const char *path, char *const argv[])
//參數說明:
//path:被執行程序名(含完整路徑)
//argv[]:被執行程序所需的命令行參數數組

system

#include <stdlib.h>

int system(const char *string)
//功能:
//調用fork產生子進程,由子進程調用/bin/sh -c string來執行參數string所表明的命令

進程等待

#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status)
//功能:阻塞該進程,直到某個子進程退出
相關文章
相關標籤/搜索