- 论坛徽章:
- 0
|
回复 1楼 hebioldman 的帖子
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
void sigproc(int);
void sigcld1(int);
void sigcld2(int);
int main(int argc, char **argv)
{
pid_t pid1,pid2;
int status1,status2;
if(signal(SIGINT,&sigproc)==SIG_ERR)
{
printf("signal error!\n");
exit(0);
}
if((pid1=fork())<0)
{
printf("fork 1 error!\n");
exit(0);
}
else if(pid1==0)
{
if(signal(SIGUSR1,&sigcld1)==SIG_ERR)
{
printf("child 1 sig error!\n");
exit(-1);
}
signal(SIGINT, SIGDFL); //add this
pause();
_exit(0);
}
if((pid2=fork())<0)
{
printf("fork 1 error!\n");
exit(0);
}
else if(pid2==0)
{
if(signal(SIGUSR1,&sigcld2)==SIG_ERR)
{
printf("child 2 sig error!\n");
exit(-1);
}
signal(SIGINT, SIG_DFL); //add this
pause();
_exit(0);
}
waitpid(pid1,&status1,WUNTRACED);
waitpid(pid2,&status2,WUNTRACED);
pause();
kill(pid1,SIGUSR1); //no use
kill(pid2,SIGUSR1); //no use
exit(0);
}
void sigproc(int signo)
{
if(signo==SIGINT)
{
printf("Parent Process is Killed\n");
}
return;
}
void sigcld1(int signo)
{
if(signo==SIGUSR1)
{
printf("Child Process 1 is Killed By Parent\n");
}
return;
}
void sigcld2(int signo)
{
if(signo==SIGUSR1)
{
printf("Child Process 1 is Killed By Parent\n");
}
return;
} |
|