主进程创建p1, p2两个进程,在主进程结束同时也让子进程结束!
代码#include结果 1. CTRL+C三个进程同时结束 2. kill 主进程#include #include #include #include #include pid_t p1, p2; void my_handler(int s){ switch(s){ case SIGINT: printf("caught:%dn", s); exit(1); break; case SIGTERM: printf("caught:%dn", 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("%dn", getpid()); sleep(3); } }else if((p2 = fork()) == 0){ //进程2 while(1){ printf("%dn", getpid()); sleep(3); } } //主进程 while(1){ printf("hello %d n", getpid()); sleep(2); } return 0; }
注意:此方式在kill 子进程的时候,主进程也同时结束了!!!



