linux环境 子进程如何等待父进程发送SIGTERM信号
时间: 2023-10-01 07:07:31 浏览: 55
在Linux环境下,子进程可以通过调用`sigaction()`函数来注册`SIGTERM`信号的处理函数,并在处理函数中等待父进程发送`SIGTERM`信号。具体步骤如下:
1. 子进程调用`sigaction()`函数来注册`SIGTERM`信号的处理函数,将`sa_handler`设置为一个处理函数,比如`sigterm_handler()`。
```c
struct sigaction act;
act.sa_handler = sigterm_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGTERM, &act, NULL);
```
2. 在`sigterm_handler()`函数中,使用`pause()`函数来挂起子进程,等待父进程发送`SIGTERM`信号。
```c
void sigterm_handler(int signum) {
pause();
}
```
3. 父进程可以通过向子进程发送`SIGTERM`信号来通知子进程退出。在父进程中使用`kill()`函数向子进程发送`SIGTERM`信号。
```c
kill(child_pid, SIGTERM);
```
当父进程发送`SIGTERM`信号时,子进程会从`pause()`函数中返回,并执行后续的代码。此时,子进程可以在处理函数中做一些清理工作,并退出进程。比如:
```c
void sigterm_handler(int signum) {
// do some cleanup work
exit(EXIT_SUCCESS);
}
```