我的程序老是产生僵尸进程,谁能帮忙解决一下啊?

发布于 2022-07-16 03:10:32 字数 3206 浏览 8 评论 4

下面是回收子进程的sigchild函数,最多只有5个进程在跑(包含父进程),经常产生僵尸进程,谁能解释一下呢?
void sigchild(int signo)
{
    pid_t pid;
    int status = 0;
    int exitvalue = 0;
    __process_exit_info info;                           //内部定义的一个结构体
   
    while ((pid = waitpid(-1,&status,WNOHANG)) > 0)   
    {
            info.pid = pid;
            info.exitstatus = 0;
           
            if (WIFEXITED(status))
                   {
                          exitvalue = WEXITSTATUS(status);
                          info.exitcode = exitvalue;
                          LogInfo("child process %d normal exited!n",pid);    //写日志
                   }
                  
                  if (WIFSIGNALED(status))
                   {
                           info.exitstatus = -1;
                          
                         exitvalue = WTERMSIG(status);                         
                         //LogErr("child process %d terminated by signal %d!n",pid,exitvalue);      //写错误日志
                         WriteLevelLog(LOG_ERROR,"child process %d terminated by signal %d!n",pid,exitvalue);
        }         
         
        //如果是文件处理进程退出,则从g_filelist删除此子进程的对应项

                g_exitproclist.push_back(info);                    
                g_FileProcessCount -= 1;            
   
    }
          
    return;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

总攻大人 2022-07-27 09:49:34

顶一下先

花心好男孩 2022-07-27 00:27:18

我也不太清楚,不过父进程执行过程有被SIGCHLD信号中断的可能!
等待高手出现!!

爱的那么颓废 2022-07-23 08:20:13

这是一个子进程回收的函数,系统捕捉到SIGCHLD信号后调用该函数;
不用sleep的吧

放我走吧 2022-07-21 11:57:54

不知道这个函数怎么调用?
另外,循环是不是要有个sleep呀?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文