子进程如何给父进程发消息告诉自己结束的信息
时间: 2023-12-10 13:39:49 浏览: 78
在 Unix/Linux 系统中,一个子进程可以通过发送一个信号给它的父进程来告诉父进程它已经结束了。这可以通过调用系统函数 `kill()` 来实现。在父进程中,可以使用 `signal()` 函数来注册处理该信号的函数,以便在子进程结束时收到信号并采取相应的操作。
下面是一个简单的示例代码,演示了如何在子进程结束时向父进程发送信号:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
void child_handler(int signum)
{
printf("Child process ended.\n");
}
int main()
{
pid_t pid;
int status;
signal(SIGCHLD, child_handler); // 注册处理子进程结束信号的函数
pid = fork();
if (pid == 0) {
// 子进程执行的代码
printf("Child process started.\n");
sleep(3);
printf("Child process ended.\n");
exit(0);
} else if (pid > 0) {
// 父进程执行的代码
printf("Parent process started.\n");
wait(&status); // 等待子进程结束
printf("Parent process ended.\n");
} else {
// fork() 函数调用失败
perror("fork");
exit(1);
}
return 0;
}
```
在上面的示例代码中,父进程调用 `signal()` 函数来注册了一个信号处理函数 `child_handler()`,该函数在子进程结束时被调用。在子进程中,调用 `exit()` 函数来结束子进程,并向父进程发送 `SIGCHLD` 信号。当父进程收到 `SIGCHLD` 信号时,它会调用 `child_handler()` 函数进行处理。
阅读全文