面试题答案
一键面试- 捕获SIGTERM信号的方法:
- 在Linux环境下使用C语言捕获SIGTERM信号,需要使用
signal
函数或sigaction
函数。signal
函数相对简单,但在某些复杂场景下功能有限,sigaction
函数功能更强大,推荐使用sigaction
。 sigaction
函数原型为:int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
。- 其中
signum
是要捕获的信号,这里是SIGTERM
;act
是一个指向struct sigaction
结构体的指针,用于设置信号处理函数等信息;oldact
如果不为空,会保存之前的信号处理配置。
- 在Linux环境下使用C语言捕获SIGTERM信号,需要使用
- 代码示例:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
// 信号处理函数
void sigterm_handler(int signum) {
printf("Caught SIGTERM signal\n");
}
int main() {
struct sigaction sa;
sa.sa_handler = sigterm_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGTERM, &sa, NULL) == -1) {
perror("sigaction");
return 1;
}
printf("Waiting for SIGTERM signal...\n");
while (1) {
sleep(1);
}
return 0;
}
上述代码实现了以下功能:
- 定义了一个信号处理函数
sigterm_handler
,当捕获到SIGTERM
信号时,会打印Caught SIGTERM signal
。 - 在
main
函数中,使用sigaction
函数设置了SIGTERM
信号的处理函数为sigterm_handler
。 - 程序进入一个无限循环,等待
SIGTERM
信号的到来。当接收到SIGTERM
信号时,会调用sigterm_handler
函数进行处理。