编写c程序:实现父进程和子进程,父进程3秒打印一次id,子进程1s打印一次id, 接受从键盘输入的ctrl-c信号后,父进程打印“父进程已接收信号”并退出,子进程打印“子进程已接收信号”并退出。
时间: 2023-12-04 16:04:43 浏览: 60
以下是实现该功能的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void parent_handler(int sig);
void child_handler(int sig);
int main() {
pid_t pid;
signal(SIGINT, parent_handler); // 父进程捕获ctrl-c信号
pid = fork(); // 创建子进程
if (pid < 0) { // fork失败
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) { // 子进程
signal(SIGINT, child_handler); // 子进程捕获ctrl-c信号
while (1) {
printf("子进程ID:%d\n", getpid());
sleep(1);
}
} else { // 父进程
while (1) {
printf("父进程ID:%d\n", getpid());
sleep(3);
}
}
return 0;
}
void parent_handler(int sig) {
printf("父进程已接收信号\n");
exit(EXIT_SUCCESS);
}
void child_handler(int sig) {
printf("子进程已接收信号\n");
exit(EXIT_SUCCESS);
}
```
程序中通过调用`fork()`函数创建了一个子进程,父进程和子进程都分别设置了信号处理函数,并捕获了ctrl-c信号。父进程每隔3秒打印一次进程ID,子进程每隔1秒打印一次进程ID。当父进程或子进程接收到ctrl-c信号时,会执行相应的信号处理函数,打印提示信息并退出。
阅读全文