linux中系统信号机制,Linux操作系统的信号机制详细介绍

信号是unix中所使用的进程通信的一种最古老的方法。系统使用它来同志一个或多个进程异步事件的发生。

linux系统库bits/signum.h对信号名作了定义:

linux的大多数信号是提供给内核的,仅有少数几种信号可以在信号间发送。

.SIGHUP 当终止一个终端时,内核就把这种信号发送给该终端所控制的所有进程。

.SIGINT 当一个用户按下中断键(ctrl+c)后,内核就向该终端用关联的所有进程发送这个信号。

.SIGQUIT 当用户按下(ctrl+),内核就向该终端用关联的所有进程发送这个信号。

.SIGILL 当一个进程企图执行一条非法指令时,内核就发送这个信号。

.SIGFPE 当产生浮点错误时,内核就发送这个信号。

.SIGKILL 这是一个非常特殊的信号,他可以从一个进程发送到另一个进程,使接收到该信号的进程终止。内核偶然也发送这种信号。

.SIGALRM 当一个定时器到时的时候,内核就发送这个信号。

.SIGSTOP 子进程结束信号.UNIX用它来实现系统调用exit(),wait();

信号的处理

unix的系统调用signal()用于接受一个指定的信号,并可以指定相应的处理方法。

在linux系统库signal.h中,它的说明如下:

signal(int sig,sighandler_t handler);

sig用于指定信号类型。handle是用于处理该信号的函数。

handle还可以是:

.SIG_IGN 忽略这个信号。

.SIG_DFL 恢复对这个信号的默认处理。

例如:

#include

#include

#include

main(){

signal(SIGINT,SIG_IGN);

printf("hello!n");

sleep(10);

printf("hellon");

}

上面的代码忽略了SININT信号。

又例如:

#include

#include

#include

int catch(int sig);

main(){

signal(SIGINT,catch);

printf("hello!n");

sleep(10);

printf("hello!n");

}

int catch(int sig){

printf("catch signaln");

return 1;

}

当用户按下ctrl+c时,进程被中断,catch()被执行.中断处理函数处理完毕后,转回断点执行下面的指令。

当编写自己的中断处理函数时,注意下面两点:

1.信号不能打断系统调用。

2.信号不能打断信号处理函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值