高手请:(unix问题)怎样清除内存中的僵尸进程问题
按照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;
}