#include <stdio.h> #include <signal.h> #include <unistd.h> int func(); main() { int i,j; signal(17,func); if(i=fork()) { printf(“Parent: Signal 17 will be send t to Child! \n ”) kill(i,17); wait(0); printf (“Parent: finished! \n”); } else { sleep(10); printf(“Child: A signal from my Parent is received ! \n”); exit(); } } func() { printf(“It is signal 17 processing function ! \n”) }解释每一行代码,并分析实现功能,作用,预判输出结果并对输出结果进行分析
时间: 2024-03-08 21:46:06 浏览: 38
#include <stdio.h>
```
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
int func(); // 声明函数 func
main() {
int i, j;
signal(17, func); // 注册信号处理函数 func,当收到信号 17 时,执行 func 函数
if(i = fork()) { // 创建子进程
printf("Parent: Signal 17 will be send to Child!\n");
kill(i, 17); // 向子进程发送信号 17
wait(0); // 等待子进程退出
printf("Parent: finished!\n");
}
else {
sleep(10); // 子进程暂停 10 秒
printf("Child: A signal from my Parent is received!\n");
exit(); // 子进程退出
}
}
func() {
printf("It is signal 17 processing function!\n");
}
```
实现功能:父进程向子进程发送信号 17,子进程收到信号后输出信息。
作用:演示 Linux 中进程间通信的方式之一,信号通信。
预判输出结果:父进程输出 "Parent: Signal 17 will be send to Child!",子进程暂停 10 秒后输出 "Child: A signal from my Parent is received!",父进程最后输出 "Parent: finished!"。
输出结果分析:父进程先输出 "Parent: Signal 17 will be send to Child!",然后向子进程发送信号 17,子进程因为执行了 `sleep(10)`,所以在 10 秒后才输出 "Child: A signal from my Parent is received!",然后子进程退出,父进程因为调用了 `wait(0)`,所以等待子进程退出后才输出 "Parent: finished!"。在子进程输出信息前,还会执行一次信号处理函数 func,输出 "It is signal 17 processing function!"。
阅读全文