关于防止僵尸进程的问题

yxluocn 2008-09-28 03:40:24
最近在linux下写一个程序,需要不断创建子进程调用脚本,可是经常会产生僵尸进程。通过网上查询,找到了解决办法。即声明一个函数:
void xx_fork(int signo)
{
pid_t pid;
int stat;
pid = waitpid(-1,&stat, 1);
printf("退出进程号为:%d 系统新增进程序。\n",pid);
return;
}
然后在调用子进程之前执行
signal(SIGCHLD, xx_fork);

于是就有了下面的问题,假如我有10个创建子进程的函数,我是只需创建一个void xx_fork(int signo)函数,然后在调用子进程(10个)之前调用signal(SIGCHLD, xx_fork)即可;还是说要对应10个函数创建10个类似void xxxn_fork(int signo)的函数(n=1~10),然后对应调用signal(SIGCHLD, xxxn_fork)?
...全文
140 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiyijiji 2008-09-28
  • 打赏
  • 举报
回复
设置struct sigaction的sa_flags为SA_NOCLDSTOP
Arthur_ 2008-09-28
  • 打赏
  • 举报
回复
^_^ so cute
psc88 2008-09-28
  • 打赏
  • 举报
回复
是sigaction
yxluocn 2008-09-28
  • 打赏
  • 举报
回复
[root@localhost tr069]# man sigacion
man: 没有那个文件或目录
Failed to open the message catalog man on the path NLSPATH=<none>

No manual entry for sigacion

Arthur_ 能大概介绍一下吗?我在网上也搜不到sigacion的详细资料。
Arthur_ 2008-09-28
  • 打赏
  • 举报
回复

是的。signal 修改标志位当xxx_fork被执行后标志位恢复,

你还是使用sigaction, 这个就一个函数就好了。

man sigacion 看使用方法。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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