如何在Linux中捕获并处理Ctrl+C信号?

在Linux系统中,用户可以通过编写程序来捕获并处理Ctrl+C组合键发送的SIGINT信号。

使用Shell脚本捕获Ctrl+C

如何在Linux中捕获并处理Ctrl+C信号?插图1
(图片来源网络,侵删)

在Shell脚本中,可以使用trap命令来捕获和处理信号。

#!/bin/bash
function onCtrlC() {
    echo 'Ctrl+C is captured'
}
trap 'onCtrlC' SIGINT
while true; do
    echo 'I am working!'
    sleep 1
done

在这个脚本中,当按下Ctrl+C时,会触发onCtrlC函数,输出“Ctrl+C is captured”。

使用C语言捕获Ctrl+C

在C语言中,可以使用signal函数或sigaction函数来捕获Ctrl+C信号。

使用signal函数

如何在Linux中捕获并处理Ctrl+C信号?插图3
(图片来源网络,侵删)
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
void fun_sig(int sig) {
    printf("sig = %d
", sig);
    // 第二次收到信号时,以默认的方式处理
    signal(sig, SIG_DFL);
}
int main() {
    signal(SIGINT, fun_sig); // ctrl-c
    while (1) {
        printf("running...
");
        sleep(1);
    }
    return 0;
}

使用sigaction函数

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void my_handler(int s) {
    printf("Caught signal %d
", s);
    exit(1);
}
int main(int argc, char **argv) {
    struct sigaction sigIntHandler;
    sigIntHandler.sa_handler = my_handler;
    sigemptyset(&sigIntHandler.sa_mask);
    sigIntHandler.sa_flags = 0;
    sigaction(SIGINT, &sigIntHandler, NULL);
    pause();
    return 0;
}

在这两个例子中,当按下Ctrl+C时,都会调用注册的处理函数,执行自定义逻辑。

各位小伙伴们,我刚刚为大家分享了有关linux ctrl c 捕获的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

如何在Linux中捕获并处理Ctrl+C信号?插图5
(图片来源网络,侵删)

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/71300.html

小末小末
上一篇 2024年10月8日 08:40
下一篇 2024年10月8日 09:01

相关推荐