unix signal信号捕捉机制

unix系统的信号机制最简单的接口是signal函数.
#include <signal.h>
void (*signal(int signo, void (*func) (int) ) ) (int);
写成:
typedef void sigfunc(int);

sigfunc *signal(int, sigfunc *);


signo表示信号名,后面的表示处理函数地址,如果使用系统默认的,则使用SIG_DFL

当指定函数地址时,则在信号发生时,会自动调用该函数,我们就称这种处理为“捕捉”该信号。

看一个实际的例子:


#include "apue.h"
static void sig_usr(int); /* one handler for both signals */

int
main(void)
{

//先指定函数地址,即如果发生了SIGUSR1或者SIGURS2信号,则内核会调用sig_usr()进行处理
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();   //等待信号,此时如果是SIGUSR1或者SIGURS2信号,则会被“捕捉”,其他信号以默认方式处理
}


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);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值