- 论坛徽章:
- 0
|
父进程不停地收到SIGCHLD信号?不知为什么,贴上代码,在线等!
头文件少了一个#include <sys/wait.h>;,你看这样改写怎么样?
#include <stdio.h>;
#include <stdlib.h>;
#include <signal.h>;
#include <sys/types.h>;
#include <sys/wait.h>;
#define MAX 2
int childnum, num;
void child_run(int singo)
{
printf( "child[%d]\n", getpid() );
sleep(2);
}
void sig_child(int singo )
{
int status;
printf( "child exit\n" );
signal(SIGCHLD, sig_child);
waitpid(0, &status, WNOHANG);
childnum--;
}
main()
{
pid_t pid;
childnum = num = 0;
int i=SIGCHLD;
signal(SIGCHLD, sig_child);
while(1){
if( childnum >;= MAX ) { sleep(1); continue; }
sleep(1);
if(num++>;5) return ;
pid=fork();
if(pid<0) { printf("fork err\n" ; return(-1); }
else if(pid==0) { child_run(i); exit(0); }
else if(pid >;0) {
childnum++;
}
}
return ;
} |
|