#include
#include
#include
#include
#include
void sig_child(){
pid_t pid;
int status;
while((pid = waitpid(-1,&status,WNOHANG)) > 0) {}
//Key !!!!!!!! wait or waitpid
return;
}
void nodefunct_sig(){
signal(SIGCHLD,sig_child);//prevent defunct
int child=0;
pid_t status=0;
int i=0;
while(1){
if(child=fork()==0){
childf();
printf("child(%d):I will be exit...pgid=%d\n",getpid(),getpgid(getpid()));//getpgrp()
abort();
char cmd[1024]="";
sprintf(cmd,"kill -9 %d",getpid());
system(cmd);
exit(5);
}else{
printf("Parent(%d):Main process...\n",getpid());
//kill(child,SIGABRT);
system("ps -A|grep a.out");
sleep(3);
}
printf("Parent: waitting child...pgid=%d\n\n",getpgid(getpid()));
//waitpid(child,
}
}
void main(){
nodefunct_sig();
}