如果其所有子程序都在執行,則阻塞。
如果乙個子程序已經終止,正在等待的父程序獲取到終止狀態,則取得該子程序的終止狀態立即返回。
如果他沒有任何子程序,則立即出錯返回。
void
sig_chld
(int signo)
}
pid>0時,只等待程序id等於pid的子程序,不管其它已經有多少子程序執行結束退出了,只要指定的子程序還沒有結束,waitpid就會一直等下去。
pid=-1時,等待任何乙個子程序退出,沒有任何限制,此時waitpid和wait的作用一模一樣。
pid=0時,等待同乙個程序組中的任何子程序,如果子程序已經加入了別的程序組,waitpid不會對它做任何理睬。
pid<-1時,等待乙個指定程序組中的任何子程序,這個程序組的id等於pid的絕對值。
options:options提供了一些額外的選項來控制waitpid,目前在linux中只支援wnohang和wuntraced兩個選項,最常用的就是wnonhang來避免阻塞
waitpid的返回值比wait稍微複雜一些,一共有3種情況:
1、當正常返回的時候,waitpid返**集到的子程序的程序id;
2、如果設定了選項wnohang,而呼叫中waitpid發現沒有已退出的子程序可收集,則返回0;
3、如果呼叫**錯,則返回-1,這時errno會被設定成相應的值以指示錯誤所在。當pid所指示的子程序不存在,或此程序存在,但不是呼叫程序的子程序,waitpid就會出錯返回,這時errno被設定為echild;
void
sig_chld
(int signo)
}
重啟計算機
殺死父程序
linux 程序等待 wait waitpid
waitpid 與 wait 功能相似,都是使用者主程序等待子程序結束或中斷.可用於程序之間的同步 wait 函式原型 pid t wait int status 函式說明 wait 會臨時停止眼下程序的執行,直到有訊號來到或子程序結束.假設在呼叫wait 時子程序已經結束,則 wait 會立即返回...
程序之wait waitpid使用
上個部落格講了如何使用fork簡單的建立乙個新的程序,本篇文章將講下如何避免殭屍程序的產生,殭屍程序的產生就是因為子程序退出時沒有父程序替它 收屍 即沒有獲取子程序的狀態資訊,一般我們可以使用wait或者waitpid函式來進行處理 下面的 示例演示了子程序如何成為殭屍程序的過程 include i...
殭屍程序和如何刪除殭屍程序
當乙個子程序結束後,他的父程序沒有等待他 wait waitpid 清除他的所有資源時,它就變成乙個殭屍程序。在linux系統中,在每個程序退出的時候,核心釋放該程序所有的資源,包括開啟的檔案,占用的記憶體等。但是仍然為其保留一定的資訊 包括程序號the process id,退出狀態the ter...