编写一个c程序,满足以下要求: 用系统调用列出所有的信号;(kill –l) 用系统调用signal()让父进程捕捉键盘上来的中断信号(Ctrl-C); 当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止 Child Process 1 is Killed by Parent! Child Process 2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent Process is Killed!
时间: 2023-12-03 08:44:47 浏览: 44
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void child_1_handler(int sig)
{
printf("Child Process 1 is Killed by Parent!\n");
exit(0);
}
void child_2_handler(int sig)
{
printf("Child Process 2 is Killed by Parent!\n");
exit(0);
}
int main()
{
pid_t pid1, pid2;
int status;
// 列出所有信号
system("kill -l");
// 捕捉中断信号
signal(SIGINT, SIG_IGN); // 禁止父进程使用 Ctrl-C 中断
pid1 = fork();
if (pid1 < 0) {
printf("Fork error!\n");
exit(1);
} else if (pid1 == 0) { // 子进程1
signal(SIGINT, SIG_IGN); // 子进程1不需要捕捉中断信号
while (1) {} // 子进程1一直运行
} else { // 父进程
pid2 = fork();
if (pid2 < 0) {
printf("Fork error!\n");
exit(1);
} else if (pid2 == 0) { // 子进程2
signal(SIGINT, SIG_IGN); // 子进程2不需要捕捉中断信号
while (1) {} // 子进程2一直运行
} else { // 父进程
printf("Parent Process is Running!\n");
signal(SIGINT, SIG_DFL); // 恢复父进程捕捉中断信号
// 等待两个子进程终止
waitpid(pid1, &status, 0);
waitpid(pid2, &status, 0);
printf("Parent Process is Killed!\n");
exit(0);
}
}
}
```