APUE 第十章 信号

产生信号的条件:

 

1. 按某些中断按键时,Ctrl + C

2. 硬件异常,除0操作

3. 用户调用 kill

4. 定时器超时 SIGALRM

信号处理

1. 忽略信号

大多数信号都可忽略,除了SIGKILL和SIGSTOP, 这两个提供了进程终止的可靠方法

2. 捕捉信号

3. 执行系统默认动作 大多数信号的系统默认动作是终止该进程

终止进程以后,有可能生成.core文件,该文件用来检查进程终止时的状态

后面该书列出了很多信号比如SIGTRAP,SIGSTOP,介绍了对应的功能,暂不考虑

10.3 函数sxignal

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

signo是信号名,比如SIGSTOP

func的值是常量SIG_IGN(ignore 忽略该信号)、SIG_DFL(default 系统默认处理方式) 或者接收到信号后要调用的函数地址. 如果是函数地址,则在信号发生时调用该函数,该函数被称为signal handler

#include "apue.h"

static void     sig_usr(int);   /* one handler for both signals */

int
main(void)
{
        if (signal(SIGUSR1, sig_usr) == SIG_ERR)
                err_sys("can't catch SIGUSR1");
        if (signal(SIGUSR2, sig_usr) == SIG_ERR)
                err_sys("can't catch SIGUSR2");
        for ( ; ; )
                pause();
}

static void
sig_usr(int signo)              /* argument is signal number */
{
        if (signo == SIGUSR1)
                printf("received SIGUSR1\n");
        else if (signo == SIGUSR2)
                printf("received SIGUSR2\n");
        else
                err_dump("received signal %d\n", signo);
}

运行上述函数(位置在apue/signals/sigusr.c),可得如下结果:

./a.out & 表示在后台运行a.out,否则前台运行会占用shell,我们无法继续执行其他shell

看到268页,程序启动那一章,看不下去了,,,,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值