高分求僵尸进程解决办法

pigcoffee 2009-10-15 09:44:25
源代码如下:

for( procNum = 0; procNum < MAX_PROC_NUM; procNum++ )
{
if( TaskList[procNum].procNum < 0 )
{
continue;
}

TaskList[procNum].proc_id = fork();
if( TaskList[procNum].proc_id > 0 ) /*父进程*/
{
printf("启动子进程,进程编号[%d] 进程号[%ld] \n",TaskList[procNum].procNum,TaskList[procNum].proc_id);
continue;
}
else if( TaskList[procNum].proc_id == 0 )
{
//调用处理函数
}
else
{
perror("fork");
return FAIL;
}
}
/*等待子进程的结束*/
for( procNum = 0; procNum < MAX_PROC_NUM; procNum++ )
{
if( TaskList[procNum].procNum < 0 )
{
continue;
}

printf("等待子进程结束:[%ld]……\n",TaskList[procNum].proc_id);

waitpid(TaskList[procNum].proc_id,&TaskList[procNum].dealFlag,0);

if( TaskList[procNum].dealFlag != SUCCESS )
{
printf("进程编号[%d] 进程号[%ld] 出错代码 [%d] \n",TaskList[procNum].procNum,TaskList[procNum].proc_id,TaskList[procNum].dealFlag);
}
else
{
printf("进程编号[%d] 进程号[%ld] 结束代码 [%d] \n",TaskList[procNum].procNum,TaskList[procNum].proc_id,TaskList[procNum].dealFlag);
}
}


*****************************************************************************
当某个进程运行完后,程序就会出现僵尸进程,由于刚接触进程,请高手指教
...全文
237 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pcboyxhy 2009-10-15
  • 打赏
  • 举报
回复
两次fork即可避免僵尸进程,看APUE
pigcoffee 2009-10-15
  • 打赏
  • 举报
回复
1L可以说的具体点么??我刚接触进程
yutaooo 2009-10-15
  • 打赏
  • 举报
回复

不是已经调用waitpid了吗?不应该再有zombie process了呀?!

LZ是否需要的是一个非阻塞的调用?比如将waitpid的options参数设置成WNOHANG?

pid_t waitpid(pid_t pid, int *status, int options);
Wolf0403 2009-10-15
  • 打赏
  • 举报
回复
捕捉 SIGCHLD,在 signal handler 中用 wait3 WNOHANG 循环处理所有已经结束的子进程。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧