简介
主进程创建p1, p2两个进程,在主进程结束同时也让子进程结束!
代码
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
pid_t p1, p2;
void my_handler(int s){
switch(s){
case SIGINT:
printf("caught:%d\n", s);
exit(1);
break;
case SIGTERM:
printf("caught:%d\n", s);
kill(p1, 9);
kill(p2, 9);
waitpid(p1, NULL, 0);
waitpid(p2, NULL, 0);
exit(1);
break;
}
}
int main(){
struct sigaction sigHandler;
sigHandler.sa_handler = my_handler;
sigemptyset(&sigHandler.sa_mask);
sigHandler.sa_flags = 0;
//捕获ctrl+c信号
sigaction(SIGINT, &sigHandler, NULL);
//捕获kill pid信号
sigaction(SIGTERM, &sigHandler, NULL);
// pid_t p1, p2;
if((p1 = fork()) == 0){
//进程1
while(1){
printf("%d\n", getpid());
sleep(3);
}
}else if((p2 = fork()) == 0){
//进程2
while(1){
printf("%d\n", getpid());
sleep(3);
}
}
//主进程
while(1){
printf("hello %d \n", getpid());
sleep(2);
}
return 0;
}
结果
1. CTRL+C三个进程同时结束
2. kill 主进程
注意:此方式在kill 子进程的时候,主进程也同时结束了!!!