1、獲取本程序id pid_t getpid(void)
2、獲取父程序id pid_t getppid(void)
3、建立子程序 pid_t fork(void)
//被呼叫一次,卻返回兩次,它可能有三種不同的返回值:
//在父程序中,fork返回新建立的子程序的pid
//在子程序中,fork返回0
//如果出錯,fork返回乙個負值
//用fork建立子程序時,子程序和父程序fork後面的**是共享的,但子程序的資料空間和堆疊空間都會從父程序得到乙個拷貝,二不是共享。
4、建立子程序 pid_t vfork(void)
5、fork()與vfork()比較
(1)fork: 子程序拷貝父程序的資料段 vfork():子程序與父程序共享資料段
(2)fork:父程序與子程序的執行次序不確定 vfork():子程序先執行,父程序後執行
6、exec函式族
//exec用被執行的程式替換呼叫它的程式
//exec 不會建立乙個新程序,它會執行乙個程式,用這個執行的程式**去替換原有程序的**
7、 int exec(const char * path,cosnt char * arg1,.....)
// path :被執行程式名(包含完整路徑)
// arg1.....argn :被執行程式所需的命令列引數,包含程式名。以空指標(null)結束。
//execl("/bin/ls","ls","-al","/etc/passwd",(char *) 0);
8、execlp(const char * path,cosnt char * arg1,.....)
// path :被執行程式名(不包含完整路徑,從path環境變數中查詢改程式)
// arg1.....argn :被執行程式所需的命令列引數,包含程式名。以空指標(null)結束。
//execlp("ls","ls","-al","/etc/passwd",(char *) 0);
9、int execv(const char * path, char *cosnt argv)
// path :被執行程式名(包含完整路徑)
// argv:被執行程式所需的命令列引數陣列
char * argv=;
execv("/bin/ls",argv);
10、int system(const char * string)
//功能:呼叫fork產生子程序,有子程序來呼叫/bin/sh/ -c string 來執行引數string
11、pid_t wait(int *status)
//阻塞改父程序,直到其某個子程序退出。
//#include #include wait(null);
Linux C程序 執行緒
1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...
linux c 程序學習
1.fork 由於fork後的父程序與子程序的優先順序是一樣的,所以會存在父程序已經退出了而子程序還在執行,這時候的子程序就是孤兒程序,會被init程序收養,所以這時候getppid得到的1。int main exit 0 2.vfork 由vfork也是用來建立程序,但是子程序是共享父程序的位址空...
linux c程序監控
我們經常需要實現程序監控,如果某一程序異常退出或是跑飛則立即重啟。通常使用的有2種方法 一.supervisor來管理程序。二.自己寫程式來監管。對於1而言,有些檔案系統中不支援,需要移植安裝。對於2而言,不少都是單獨寫個監管程式,通過寫入檔案pid定時檢查程序pid是否存在,或是檢視是否有此程序名...