编写一个C程序,创建一个子进程,然后让父进程向子进程发送一个信号,子进程在接收到信号后打印一条消息。
时间: 2024-09-30 11:12:09 浏览: 20
在C语言中,你可以使用`fork()`函数创建一个新的子进程,然后使用`waitpid()`或`wait()`函数等待子进程完成。下面是一个简单的例子,演示了如何通过父进程向子进程发送SIGINT信号:
```c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void handler(int signum) {
printf("Received signal %d\n", signum);
exit(0); // 子进程退出
}
int main() {
pid_t child_pid; // 子进程ID
if ((child_pid = fork()) == -1) {
perror("Fork failed");
return 1;
}
if (child_pid == 0) { // 子进程
// 注册SIGINT处理程序
signal(SIGINT, handler);
printf("Child process started, parent PID is %d\n", getpid());
while (1) { /* 永远循环,直到收到信号 */
sleep(1); // 程序暂停1秒
}
} else { // 父进程
printf("Parent process started, child PID is %d\n", child_pid);
// 向子进程发送SIGINT信号
kill(child_pid, SIGINT);
printf("Sent SIGINT signal to child process.\n");
}
return 0;
}
```
在这个程序中,父进程先调用`fork()`创建子进程,然后分别对子进程和自身进行操作。子进程中注册了SIGINT信号处理器,当接收到该信号时,会打印一条消息并终止。父进程则在适当的时候使用`kill()`函数发送SIGINT信号给子进程。