wait和waitpid的使用和區別


   昨天看到一則新聞,講的是一個游戲開發大拿猝死去世的新聞,公司發了訃告,打算接下去給他爸爸媽媽每個月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支持工作控制

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM