程序等待:父程序對子程序進行程序等待,等待是為了讀取子程序的執行結果
標頭檔案:#include#includepid_t wait(int*status)
返回值:成功返回被等待程序pid,失敗返回-1。
引數:輸出型引數,獲取子程序退出狀態,不關心則可以設定成為null
wait函式輸乙個阻塞式函式,一直等到子程式結束才返回。
注:status是狀態碼,這個位元組的最後乙個位元組判斷是否正常終止。最後乙個位元組是0——正常終止;最後乙個位元組是非0——異常終止。異常終止的時候返回終止訊號的序號。(int status =0; wait(&status),一般wait這麼寫)
wai的注意事項:
wait呼叫的次數必須和子程序的個數一致。(和fork一致)
wait呼叫次數比較少,就會導致殭屍程序;呼叫次數最多,會呼叫出錯。
如果有多個子程序,任何乙個子程序退出就會觸發wait的返回。
pid_ t waitpid(pid_t pid, int *status, int options);
pid_t pid:子程序pid
int *status:狀態碼
int options:影響執行行為,位圖
注意://點陣圖的一些含義:
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 1000 0000 0001
//改變其中的某些位設為1,表示一種情況,幾個1幾種情況
//很多linux系統呼叫中,使用類似引數作為輔助選項,影響函式的執行行為
pid:
pid=-1,等待任乙個子程序。與wait等效。 waitpid(-1,null,0) 和 wait(null) 等價
pid>0,等待其程序id與pid相等的子程序。
options:
wnohang: 若pid指定的子程序沒有結束,則waitpid()函式返回0,不予以等待。若正常結束,則返回該子程序的id。
注:wnohang是個巨集,代表整數1;還有其他選項2,4,8(2^n);1就是把點陣圖的第一位制位1,以此類推)
返回值:
當正常返回的時候waitpid返**集到的子程序的程序id。如果設定了選項wnohang,而呼叫中waitpid發現沒有已退出的子程序可收集,則返回0。
如果呼叫**錯,則返回-1,這時errno會被設定成相應的值以指示錯誤所在。
非阻塞輪詢式的wait:
加上了 wnohang 就是非阻塞的等待。 即: waitpid(-1,null,wnohang)
好處:能夠靈活控制**,充分利用等待時間去做其他的事情
壞處:**寫起來更複雜
#include#include#include#includeint main()
pid_t ret2 = fork();
if (ret2 == 0)
printf("father %d\n", getpid());
//father
//父程序如果不關注具體的子程序推出狀態 wait(null)
//阻塞式等待
int ret = waitpid(ret1,null,0);
printf("wait1 %d\n", ret);
int ret = waitpid(ret2, null, 0);
printf("wait2 %d\n", ret);
return 0;
}
#include#include#include#includeint main()
pid_t ret2 = fork();
if (ret2 == 0)
printf("father %d\n", getpid());
//father
//父程序如果不關注具體的子程序推出狀態 wait(null)
//非阻塞式的等待
//加上了wnohang就是非阻塞的等待 //輪詢式
int count;
while (1)
while (1)
printf("count= %d\n",count);
}
Linux系統程式設計 程序控制
for 函式使用 include include include int main void else if pid 0 else if pid 0 return 0 正確建立n個子程序 include include include int main void else if pid 0 else...
Linux系統程式設計 程序控制 三
使用fork或vfork建立子程序以後,子程序呼叫exec函式來執行另外乙個函式。exec函式族 include int execve const char path,char const argv,char const envp int execv const char path,char con...
Linux系統程式設計 03 程序控制塊PCB
程序控制塊 也叫程序描述符。程序控制塊位於核心空間 sesstion 針對所有的程序 程序組 相似屬性的程序放到一組 檢視程序上下限 book 100ask ulimit a core file size blocks,c 0 data seg size kbytes,d unlimited sch...