Linux系統程式設計(7) 程序控制 程序等待

2021-09-22 05:50:36 字數 2568 閱讀 4396

程序等待:父程序對子程序進行程序等待,等待是為了讀取子程序的執行結果

標頭檔案:#include#include

pid_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...