首页 > 系统服务 > 详细

进程的wait函数

时间:2019-02-27 10:56:11      阅读:163      评论:0      收藏:0      [点我收藏+]

1.wait函数的作用

  多进程程序中,父进程需要跟踪子进程的退出状态。因此当子进程退出时,内核不会立刻释放该进程的进程表项,而是需要父进程读取一下子进程的状态,子进程才能终止。

  因此子进程运行结束之后,父进程读取其退出状态之前,称该进程处于僵尸态。另外一种是父进程终止或者异常退出,子进程继续执行(此时子进程的PPID被操作系统设置为1,即init进程接管了该子进程并等待它结束),则在子进程退出之前,该子进程处于僵尸态。

  因此只要是父进程没有读取子进程的返回信息,子进程就会停在僵尸态。

  所以wait、waitpid函数就是用来读取子进程的返回信息,使子进程完全终止。

2.wait、waitpid函数的使用方法

  pid_t wait(int *status);    //wait函数会在父进程中阻塞,等待子进程结束,如果子进程结束,则返回子进程的PID。如果没有子进程则立刻返回-1。

  pid_t waitpid(pid_t pid, int *status, int options);  //waitpid函数等待子进程结束(options设置为WNOHANG时为非阻塞),如果子进程结束,则返回子进程的PID。如果没有子进程则立刻返回-1,如果是非阻塞的并且子进程还没有结束,则返回0。

  由于这两个函数会阻塞等待(非阻塞时也需要轮询执行),所以常规使用方式为:当子进程退出时会给父进程发送SIGCHID信号,因此父进程捕获SIGCHID信号,并在信号处理函数中调用waitpid函数来结束一个子进程。如下:

  技术分享图片

3.问题

  问题1:如果有多个子进程,则任意一个子进程结束时,wait函数就会返回,所以此时可以循环判断wait返回-1时(另外返回-1时,errno 等于EINTR时表示中断,所以此时需要继续循环等待),才表示所有子进程都退出了。

    

  

进程的wait函数

原文:https://www.cnblogs.com/iamwho/p/10441700.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!