MST
星途 面试题库

面试题:C语言中信号捕获函数的基本使用

在Linux环境下,用C语言编写一个简单程序,使用信号捕获机制,当接收到SIGINT信号(通常由Ctrl+C产生)时,输出一条自定义的提示信息,并继续运行,不退出程序。请说明主要涉及的函数及其参数含义。
16.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

// 信号处理函数
void signal_handler(int signum) {
    printf("接收到SIGINT信号,程序继续运行。\n");
}

int main() {
    // 注册信号处理函数
    if (signal(SIGINT, signal_handler) == SIG_ERR) {
        printf("\n 无法捕获SIGINT信号\n");
        return 1;
    }

    printf("按Ctrl+C发送SIGINT信号。程序将继续运行...\n");

    // 程序主循环,保持运行
    while(1) {
        sleep(1);
    }

    return 0;
}

主要涉及函数及其参数含义

  1. signal函数
    • 函数原型void (*signal(int signum, void (*handler)(int)))(int);
    • 参数
      • signum:要捕获的信号编号,这里使用SIGINT(通常值为2),代表用户通过Ctrl+C产生的中断信号。
      • handler:信号处理函数的指针,这里是自定义的signal_handler函数。它接收一个int类型参数,该参数就是接收到的信号编号。signal函数返回旧的信号处理函数指针,如果出错则返回SIG_ERR
  2. sleep函数
    • 函数原型unsigned int sleep(unsigned int seconds);
    • 参数seconds表示程序要暂停的秒数。在上述代码中,主循环使用sleep(1)让程序每秒循环一次,同时等待信号的到来。这样可以避免程序空转占用过多CPU资源。