內容:進程的標識、運行、終止、進程間競爭和進程操作
1.進程的運行和終止
每個進程都有唯一的ID,ID為0 的系統進程swapper稱作交換進程,是一個系統調度進程;ID為1的進程init是一個使用者進程,負責讀與系統有關的初始設定檔案;ID為2的進程是pagedaemon頁精靈進程,是系統進程。這些進程是特殊的進程,是不能被中止的。
關於進程的運行和終止的一些函數:fork、vfork、exec、exit。
fork函數是Linux系統建立新進程的惟一方法。fork函數可以建立除交換進程、init進程和頁精靈進程之外的使用者進程。
vfork函數用來建立一個新進程,進程建立以後馬上執行exec一執行一個新程式。
exec本身不能建立新進程,因為執行exec前後原父進程和子進程的ID並沒有改變。
exit函數調用由atexit註冊的清除的函數,並關閉所有的標準I/O流。進程的退出狀態很重要,一般以0值表示正常退出。
函數的原型為:
#include <sys/types.h>#include <unistd.h>pid_t fork(void);pid_t vfork(void);//#include <unistd.h>int execl(const char *pathname, const char arg0,...);int execv(const char *pathname, char *const argv[]);int execle(const char *pathname, const char *arg0,...);int execve(const char *pathname, char *const argv[], char *const envp[]);int excelp(const *filename, const char *arg0,...);int execvp(const char *filename, char *const argv[]);//#inlcude <stdlib.h>void exit(int status);#inlcude <unistd.h>void _exit(int status);
2.wait操作
當調用wait或者waitpid系統調用,進程可能出現3種狀態:阻塞(當其所有子進程還在運行)、子進程處於終止狀態(立即返回)和出錯立即返回(沒有子進程)。
wait函數的格式:
#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *statloc);pid_t waitpid(pid_t pid, int statloc, int options);
//成功返回進程ID,失敗返回-1