五、信号处理 alarm

深入理解Linux信号处理机制
五、信号处理
1、信号的产生
Linux 下的信号可以类比于DOS 下的INT 或者是Windows 下的事件.在有一个信号发生
时候相信的信号就会发送给相应的进程.在Linux 下的信号有以下几个. 我们使用 kill -l
24
命令可以得到以下的输出结果:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR
关于这些信号的详细解释请查看man 7 signal 的输出结果. 信号事件的发生有两个来源:
一个是硬件的原因(比如我们按下了键盘),一个是软件的原因(比如我们使用系统函数或者是
命令发出信号). 最常用的四个发出信号的系统函数是kill, raise, alarm 和setitimer 函数.
setitimer 函数我们在计时器的使用 那一章再学习.
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
int kill(pid_t pid,int sig);
int raise(int sig);
unisigned int alarm(unsigned int seconds);
kill 系统调用负责向进程发送信号sig.
如果pid 是正数,那么向信号sig 被发送到进程pid.
如果pid 等于0,那么信号sig 被发送到所以和pid 进程在同一个进程组的进程
如果pid 等于-1,那么信号发给所有的进程表中的进程,除了最大的哪个进程号.
如果pid 由于-1,和0 一样,只是发送进程组是-pid.
我们用最多的是第一个情况.还记得我们在守护进程那一节的例子吗?我们那个时候用这个
函数杀死了父进程守护进程的创建raise 系统调用向自己发送一个sig 信号.我们可以用上面
那个函数来实现这个功能的.alarm 函数和时间有点关系了,这个函数可以在seconds 秒后
向自己发送一个SIGALRM 信号.. 下面这个函数会有什么结果呢?
#include <unistd.h>
main()
{
unsigned int i;
alarm(1);
for(i=0;1;i++)
printf("I=%d",i);
}
SIGALRM 的缺省操作是结束进程,所以程序在1 秒之后结束,你可以看看你的最后I 值为多
少,来比较一下大家的系统性能差异(我的是2232).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值