加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux进程管理之wait系统调用

发布时间:2016-06-08 04:09:28 所属栏目:Linux 来源:站长网
导读:六: wait4 ()系统调用 在父进程中,用wait4()可以获得子进程的退出状态,并且防止在父进程退出前,子进程退出造成僵死 状态。这是我们这节分析的最后一个小节了

eligible_child()用来判断子进程是否是我们想要wait的子进程.代码如下:

static int eligible_child(pid_t pid, int options, struct task_struct *p)
{
   int err;
   //根据PID判断是不是我们要wait的子进程
   //pid >0:等待的子程程的进程号等于pid
   //pid = 0:等待进程组号等于当前进程组号的所有子进程
   //pid < -1 :等待任何进程组号等于pid绝对值的子进程
   //pid == -1 :等待任何子进程
   if (pid > 0) {
if (p->pid != pid)
       return 0;
   } else if (!pid) {
     if (process_group(p) != process_group(current))
       return 0;
   } else if (pid != -1) {
     if (process_group(p) != -pid)
       return 0;
   }
   //如果子进程exit_signal ==-1且没有被跟踪.那不会对子进程进行回收
   if (p->exit_signal == -1 && !p->ptrace)
     return 0;
   if (((p->exit_signal != SIGCHLD) ^ ((options & __WCLONE) != 0))
     && !(options & __WALL))
     return 0;
   /*
   * Do not consider thread group leaders that are
   * in a non-empty thread group:
   */
   //如果子进程是进程组leader,且进程组不为空
   if (delay_group_leader(p))
     return 2;
   err = security_task_wait(p);
   if (err)
     return err;
   return 1;
}

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!