linux编写程序,实现父进程和子进程,父进程3秒打印一次id,接受ctrl-c信号后,打印接受信号,并退出,子进程1s打印一次id, 打印接受信号,并退出.
时间: 2023-08-28 09:05:10 浏览: 132
好的,这是一个经典的父子进程通信问题,可以通过 fork() 函数创建子进程,然后使用信号处理函数来处理信号。以下是实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void parent_handler(int signum)
{
printf("Parent process received signal %d\n", signum);
exit(0);
}
void child_handler(int signum)
{
printf("Child process received signal %d\n", signum);
exit(0);
}
int main()
{
pid_t pid;
// 创建子进程
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork failed\n");
exit(1);
} else if (pid == 0) {
// 子进程
signal(SIGINT, child_handler);
while (1) {
printf("Child process ID: %d\n", getpid());
sleep(1);
}
exit(0);
} else {
// 父进程
signal(SIGINT, parent_handler);
while (1) {
printf("Parent process ID: %d\n", getpid());
sleep(3);
}
exit(0);
}
return 0;
}
```
在这段代码中,使用了 signal() 函数来注册信号处理函数。当父进程接收到 SIGINT 信号(即 Ctrl-C)时,会执行 parent_handler() 函数,打印接收到的信号,并退出程序。当子进程接收到 SIGINT 信号时,会执行 child_handler() 函数,打印接收到的信号,并退出程序。
父进程每 3 秒打印一次进程 ID,子进程每 1 秒打印一次进程 ID。
阅读全文