linux c信号处理简析

  1. 函数ouch对通过参数sig传递过来的信号作出响应,信号出现时,程序调用该函数,它先打印一条消息,然后将信号SIGINT(默认情况下,按下Ctrl+C将产生这个信号)的处理方式恢复为默认行为。
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

static int alarm_fired = 0;
void ding(int sig)
{
    alarm_fired = 1;
}

int main()
{
    pid_t pid;
    printf("alarm application starting\n");
    pid = fork();
    
    switch(pid)
    {
        case -1:
            /*Failure*/
            perror("fork failed");
            exit(1);
        case 0:
            /*child*/
            sleep(5);
            kill(getppid(), SIGALRM);
            exit(0);
    }

    /*if we get here we are the parent process*/
    printf("waiting for alarm to go off\n");
    (void)signal(SIGALRM, ding);
    pause();
    if (alarm_fired)
        printf("Ding\n");
    printf("done\n");
    exit(0);
}
  1. main函数的作用是,截获按下Ctrl+C组合键时产生的SIGINT信号。没有信号出现时,它会在一个无限循环中每隔一秒打印一条消息。
  2. 第一次按下Ctrl+C组合键会让程序作出响应,然后程序继续执行。再次按下Ctrl+C组合键时,程序将结束运行,因为SIGINT信号的处理方式已恢复为默认行为–终止程序的运行。
    在此例中我们可以看到,信号处理函数使用了一个单独的整数参数,它就是引起该函数被调用的信号代码。如果需要在同一个函数中处理多个信号,这个参数就很有用。在本例中,我们打印出SIGINT的值,它的值在这个系统中恰好为2,但是不能过分依赖传统的信号数字值,而应该在新的程序中总是使用信号的名字。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值