我的程序老是产生僵尸进程,谁能帮忙解决一下啊?
下面是回收子进程的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
顶一下先
我也不太清楚,不过父进程执行过程有被SIGCHLD信号中断的可能!
等待高手出现!!
这是一个子进程回收的函数,系统捕捉到SIGCHLD信号后调用该函数;
不用sleep的吧
不知道这个函数怎么调用?
另外,循环是不是要有个sleep呀?