您好,欢迎访问沃航(武汉)科技有限公司官方网站
linux下的信号处理
2017-09-13 10:00:00

首先,每个信号都有一个名字。这些名字都是以三个字符SIG开头。例如,SIGABRT是夭折信号,当进程调用abort函数时产生这种信号。SIGALRM是闹钟信号,当由alarm函数设置的计时器超时后产生此信号。Linux和Solaris都支持应用程序额外定义的信号,将其作为实时扩展。

UNIX系统的信号机制最简单的接口是signal函数。

这个函数需要包入signal.h的头部文件,这个函数的原型定义如下:

void (*signal(int signo, void (*func)(int)))(int);

返回值:若成功则返回信号以前的处理配置,若出错则返回SIG_ERR。

下面给大家演示一段通过拦截ctrl + c阻止进程被杀死的程序。

#include <stdio.h>
#include <signal.h>

void sig_init(int sigo) {
    printf("received SIG\n");
}

int main(void) {
    int pid;
    pid = getpid();
    printf("The process ID is %d\n", pid);
    if(signal(SIGINT, sig_init) == SIG_ERR) {
        printf("can't not catch SIGINT\n");
        return -1;
    }
    while(1) {
        pause();
    }
    return 0;
}

由于这个函数直接禁止了默认方法,也就是说ctrl+c失效了。所以当用户输入ctrl+c时,只会打印出

^Creceived SIG

程序并不会退出,所以就起到了成功拦截ctrl+c的信号的作用。例如tomcat,通过拦截ctrl+c,实现了当用户想退出时执行一些收尾工作的目的。

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn