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支持工作控制

 

posted on 2015-07-17 18:19  Mereyct  阅读(6975)  评论(0编辑  收藏  举报

导航