MST

星途 面试题库

面试题:C语言中如何捕获SIGTERM信号

在Linux环境下使用C语言编程,描述如何捕获SIGTERM信号,并写出一个简单的代码示例,在捕获到该信号后打印一条提示信息。
47.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 捕获SIGTERM信号的方法
    • 在Linux环境下使用C语言捕获SIGTERM信号,需要使用signal函数或sigaction函数。signal函数相对简单,但在某些复杂场景下功能有限,sigaction函数功能更强大,推荐使用sigaction
    • sigaction函数原型为:int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
    • 其中signum是要捕获的信号,这里是SIGTERMact是一个指向struct sigaction结构体的指针,用于设置信号处理函数等信息;oldact如果不为空,会保存之前的信号处理配置。
  2. 代码示例
#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函数进行处理。