Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2372138
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: C/C++

2009-04-28 10:20:42


Linux系统库 bits/signum.h中对信号做了定义,每个信号对应一

个整数
Linux的多数信号是供内核使用的,只有少数几种可以用作在进程

间传送

#define  SIGHUP   1   /* Hangup(POSIX) */
当终止一个终端时,内核就把SIGHUP信号发送给该终端 所控制的

所有进程。
通常一个进程组的控制终端是该用户拥有的终端。

当进程组的首进程结束时,就会向该进程组的所有进程发送这种

信号, 这样就确保了当一个用户退出时,其后台进程被终止,除

非有其他方面的安排


#define SIGINT
当一个用户按了中断键(^C)后,内核就向与该终端有关联的所有

进程发送这种信号,它提供了中止运行程序的简便方法


#define SIGQUIT
信号与SIGINT非常相似, 当用户按了退出键时(为ASSIC码FS, 通

常为^\), 内核就发送出这种信号。SIGQUIT将形成POSIX标准所描

述的非正常终止。我们称这种UNIX实现的实际操作为核心转贮

(core dump), 并用信息Quit(Core dump)指出这一操作的发生。

这时,该进程的映象被转贮到一个磁盘文件中,供调试之用。


#define SIGILL
当一个进程企图执行一条非法指令时,内核就发这种信号。如在

没有相应硬件支撑的条件下,企图执行一条浮点指令时,则会引

起这种信号的发生。SIGLL和SIGQUIT一样,也形成非正常的终止


#define SIGTRAP
这是一种由调试程序使用的专用信号。由于他的专用行和特殊性

,我们不再对它作进一步的讨论。SIGTRAP也形成非正常终止


#define SIGFPE
当产生浮点错误时(比如溢出),内核就发出这种信号,它导致非

正常终止


#define SIGKILL
这是一个相当特殊的信号,它从一个进程发送到另一个进程,使

接收到该信号的进程终止。内核偶尔也会发出这种信号。SIGKILL

的特点是,它不能被忽略和捕捉,只能通过用户定义的相应中断

处理程序而处理该信号。因为其它的所有信号都能被忽略和捕捉

,所以只有这种信号能绝对终止一个进程。


#define SIGALRM
当一个定时器到时的时侯,内核就向进程发送这个信号。定时器

是由该进程自己用系统调用alarm()设定的


#define SIGTERM
这种信号是由系统进程暂时中止运行,按规定,它被用来终止一

个进程。


#define SIGSTOP
这个信号使进程暂时中止运行,系统将控制权转回正在等待运行

的下一个进程。


#define SIGUSR1和SIGUSR2
和SIGTERM一样,这两种信号不是内核发送的,可用于用户所希望

的任何目的。

#define SIGCHLD
子进程结束信号。UNIX中用它来实现系统调用exit()和wait()。

执行exit()时,就向子进程的父进程发送SIGCHLD信号,如果这时

父进程正在执行wait(), 则它被唤醒;如果这时父进程不是执行

wait(),则此父进程不会捕捉SIGCHLD信号, 因此该信号不起作用

,子进程进入过渡状态(如果父进程忽略SIGCHLD,子进程就结束

而不会进入过渡状态)

#include
abort()
向调用进程发送一个信号,产生一个非正常终止,即核心转贮。

由于它能使一个进程在出错时记录进程的当前状态,所以可以用

它来作为调试的辅助手段。这也说明了进程可以向自己发送信号

这一事实


阅读(1271) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~