【APUE | 8】wait、waitpid

 

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

函数的原型:
#include <sys/wait.h>
pid_t wait(int *status);

说明:wait函数会暂时停止目前进程执行,直到有信号来到或者子进程结束。如果在调用wait时,子进程已经结束,则wait会立即返回子进程的结束状态值。如果不在意子进程的返回状态,可将参数status设为NULL。若成功返回子进程识别码(PID),若有错误发生则返回-1.


pid_t waitpid(pid_t pid,int *status,int options);
说明:
返回值:若成功返回进程ID,若出错返回-1.waitpid会暂停目前的进程执行,直到有信号或者子进程结束。
如果不在意结束时状态值,则status可以设成NULL.参数pid为欲等待的子进程识别码,其他值意义如下:
 (1) pid < -1  等待进程组识别码为pid绝对值的任何子进程
 (2) pid = -1  等待任何子进程,此时就相当于wait()
 (3) pid = 0   等待进程组识别码与目前进程相同的任何子进程
 (4) pid > 0   等待任何子进程识别码为pid的子进程
  
参数options可以设为0 或者与下面的组合:
 (1) WNOHANG 若没有任何已经结束的子进程则马上返回,不等待
 (2) WUNTRACED如果子进程进入暂停执行情况马上返回,但结束的状态不予理会

  

猜你喜欢

转载自www.cnblogs.com/sunbines/p/9233703.html
今日推荐