昨天看到一則新聞,講的是一個游戲開發大拿猝死去世的新聞,公司發了訃告,打算接下去給他爸爸媽媽每個月10000的贍養費,很是感慨,本來中國的游戲業和國外就差距大,天妒英才啊。真心想對那些游戲公司的領導說句,不要為了進度為了市場,折磨程序員了。雖然市場很重要,但是一個好的游戲,不是加快進度就能做好的。恰恰是游戲體驗,游戲的目標、規則、玩家的互動等等才是最重要的。要是10年開發一款好的游戲也是值得的。我覺得,也許我太嫩了,還不明白這個市場。但是我一直秉持一個想法:身體才是革命的本錢。如果公司老是讓你加班,還是趁早退了吧,適當的加班,無所謂。經常加班到凌晨這種,身體總有一天會吃不消的。
扯遠了。
wait和waitpid函數是用來處理僵死進程的。他們有一些區別,用的時候老是忘,就打算做個實驗測試一下。也供像我這樣UNIX網絡編程新手學習參考。
-->1、使用背景
-->2、函數原型
-->3、wait和waitpid區別
=========================================================================
-->1、使用背景
什么是僵死進程(zombie)?
zombie的作用是維護子程序的信息,以便父程序在以后能夠調用它。這些信息包括:進行ID,終止狀態、資源利用率(CPU利用率、內存使用等等)。(《UNIX網絡編程》P106)
但是操作系統限制了某一時刻能同時存在的進程的最大數目,雖然說它們不占有CPU,不占有內存,但是當下次產生新進程的時候,就會產生未知的錯誤。因此,有效的處理僵死進程,是有必要的一些事。
這個時候,就用到了wait和waitpid兩個函數。
wait和waitpid的作用?
返回已經終止的子進程的進程ID號,並清除僵死進程。
-->2、函數原型
#include <sys/wait.h> pid_t wait(int * statloc); pid_t waitpid(pid_t pid,int *statloc,int options);
成功返回進程ID,出錯返回0或者-1。
-->3、wait和waitpid區別
wait會令調用者阻塞直至某個子進程終止;
waitpid則可以通過設置一個選項來設置為非阻塞,另外waitpid並不是等待第一個結束的進程而是等待參數中pid指定的進程。
waitpid的option常量:
WNOHANG waitpid將不阻塞如果指定的pid並未結束
WUNTRACED 如果子進程進入暫停執行情況則馬上返回,但結束狀態不予以理會。
waitpid中pid的含義依據其具體值而變:
pid==-1 等待任何一個子進程,此時waitpid的作用與wait相同
pid >0 等待進程ID與pid值相同的子進程
pid==0 等待與調用者進程組ID相同的任意子進程
pid<-1 等待進程組ID與pid絕對值相等的任意子進程
waitpid提供了wait所沒有的三個特性:
1 waitpid使我們可以等待指定的進程
2 waitpid提供了一個無阻塞的wait
3 waitpid支持工作控制