plusz 2012-07-19
请参考linux c一站式学习,此节内容http://learn.akae.cn/media/ch30s03.html#id2867242
可以设置父进程忽略SIGCHLD信号,或者在SIGCHLD信号的处理函数中调用wait函数,即可获取子进程的退出状态,且销毁僵尸进程。
1)调用wait函数
#include <unistd.h> #include <stdlib.h> #include <iostream> #include <signal.h> #include <sys/wait.h> using namespace std; void sig_deal(int signo){ cout<<"I'm called"<<signo<<endl; int stat; wait(&stat); cout<<"status = "<<stat<<endl; } int main(void) { pid_t pid=fork(); if(pid<0) { cout<<"error"<<endl; exit(1); } if(pid>0) { /* parent */ signal(SIGCHLD,sig_deal); while(1); } /* child */ return 1; }
2)使用SIG_IGN
#include <unistd.h> #include <stdlib.h> #include <iostream> #include <signal.h> #include <sys/wait.h> using namespace std; void sig_deal(int signo){ cout<<"I'm called"<<signo<<endl; int stat; wait(&stat); cout<<"status = "<<stat<<endl; } int main(void) { pid_t pid=fork(); if(pid<0) { cout<<"error"<<endl; exit(1); } if(pid>0) { /* parent */ signal(SIGCHLD,SIG_IGN); while(1); } /* child */ return 1; }