2. 编写程序child.c,实现如下功能,假设父进程先执行,父进程显示3行字符串;父进程向子进程发送软中断信号,等待子进程终止后,父进程输出结束信息”OK”,然后终止执行。子进程循环显示“I am a child”,当接收到父进程发来的软信号后会停止循环,显示“child exited”并终止执行。
时间: 2023-11-24 12:06:30 浏览: 89
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void sig_handler(int sig) {
printf("child exited\n");
exit(0);
}
int main() {
int pid;
signal(SIGINT, sig_handler);
printf("This is parent process\n");
printf("Hello world!\n");
printf("My name is Parent\n");
pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
} else if (pid == 0) {
while (1) {
printf("I am a child\n");
sleep(1);
}
} else {
sleep(1);
kill(pid, SIGINT);
wait(NULL);
printf("OK\n");
exit(0);
}
return 0;
}
```
程序的具体实现如上,程序中使用了 `kill()` 函数向子进程发送软中断信号,使子进程终止循环并退出,同时父进程等待子进程退出并输出结束信息。注意:在子进程内部需要使用 `signal()` 函数来注册信号处理函数,以便在接收到 SIGINT 信号时能够正确退出子进程。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)