unix环境编程 第十章 10.3函数signal && 10.4 不可靠的信号

#include <signal.h>
void (*signal(int signo, void (*func)(int)))(int)
//成功返回以前的信号处理配置,出错返回SIG_ERR

参数signo是信号名,func的值是常量SIG_IGN,SIG_DFL或者接到此信号以后要调用的参数的地址

SIG_IGN:向内核标识忽略此信号

SIG_DFL:表示接到此信号以后动作是系统默认动作。

当func为指定函数地址的时候,则在信号发生的时候调用该函数,我们称这种处理为捕捉信号。实示例程序

#include "apue.h"
static void sig_usr(int);
int main()
{
 if(signal(SIGUSR1,sig_usr)==SIG_ERR)
         err_sys("can not catch SIGUSR1");
 if(signal(SIGUSR2,sig_usr)==SIG_ERR)
         err_sys("can not catch SIGUSR2");
 for(;;)
         pause();
}

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

运行结果

1.程序启动

当执行一个程序的时候,所有信号的状态都是系统默认或者忽略。通常所有的信号都被设置为它们的默认动作,除非调用exec忽略该进程信号。

 2.进程创建

当一个进程调用fork的时候,其子进程继承父进程的信号处理方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值