让父线程负责子线程回收工作的好方法

首先,在父线程程序中注册对于子线程的中止信号的监听

即使用如下一行代码:

signal(SIGCHLD,sigchld);

这行代码必须写在子线程创建之前

以下是信号处理函数,它负责子线程资源的回收

static void sigchld(int sig)
{
 pid_t pid;
 int status;

 /* Reap defunct children until there aren't any more. */
 for (;;) //循环非阻塞,取出死进程清理
 {
  pid = waitpid( (pid_t) -1, &status, WNOHANG ); //-1表示第一个中止的子进程,WNOHANG表示非阻塞


  if (pid==0) //没有有待回收的了
      break;

  if (pid<0)
  {
   /* because of ptrace */
   if (errno==EINTR) 
    continue;

   break;
  }
 }
}

该程序可以防止多个子线程同时中止时的回收遗漏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值