高手请:(unix问题)怎样清除内存中的僵尸进程问题

beyond_ml 2001-06-09 07:20:00
按照Richard的方法,我设置了捕捉进程退出的消息处理程序Signal(SIGCHLD,sig_chld);,虽然从一定程度上解决了这个问题。但当进程起的特别快,并且特别多之后,内存中还是会留下许多僵尸进程。请问该怎么办?

这是我的信号处理程序
/****************定义死亡信号的处理过程********************/
Sigfunc *signal(int signo, Sigfunc *func)
{
struct sigaction act, oact;

act.sa_handler = func;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if (signo == SIGALRM) {
#ifdef SA_INTERRUPT
act.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */
#endif
} else {
#ifdef SA_RESTART
act.sa_flags |= SA_RESTART; /* SVR4, 44BSD */
#endif
}
if (sigaction(signo, &act, &oact) < 0)
return(SIG_ERR);
return(oact.sa_handler);
}
/* end signal */

Sigfunc *Signal(int signo, Sigfunc *func) /* for our signal() function */
{
Sigfunc *sigfunc;

if ( (sigfunc = signal(signo, func)) == SIG_ERR)
return(sigfunc);
}

void sig_chld(int signo)
{
pid_t pid;
int stat;

while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0)
return;
}
...全文
224 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond_ml 2001-07-23
  • 打赏
  • 举报
回复
嗯,我查了一下书,这果然是个省力气的好方法。呵呵
不管怎么样,40分如数送上。
beyond_ml 2001-07-20
  • 打赏
  • 举报
回复
虽然是陈年旧章,我也还是想翻出来看看、问问。
ed9er 2001-07-20
  • 打赏
  • 举报
回复
好不好听无所谓
解释?解释和我在哪有什么关系?
andyda 2001-07-20
  • 打赏
  • 举报
回复
说我吗?这样叫你好像不好听哈。不过想听你解释的心情是真的哦
ed9er 2001-07-20
  • 打赏
  • 举报
回复
如果你有清除任务要做的话,当然不能IGN了

楼上的怎么回事?
andyda 2001-07-20
  • 打赏
  • 举报
回复
鸟?鸟你在哪儿?
beyond_ml 2001-07-20
  • 打赏
  • 举报
回复
MSDN如事说:
SIG_IGN
Ignores interrupt signal. This value should never be given for SIGFPE, since the floating-point state of the process is left undefined.
天啊!这怎么能行,我的目的就是在一个进程完成他的任务后,捕捉它发出的退出信号,然后把他清除,可如果写成……且慢,让我先试一下,哦--,真的很管用诶!
40分不能白给,给个理由先。为什么这样写可以,我自己的捕捉函数那里有问题?
ed9er 2001-07-20
  • 打赏
  • 举报
回复
signal(SIGCHLD, SIG_IGN);
第四次靠这个问题骗分啦 :)))

69,373

社区成员

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

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