分类: 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()
向调用进程发送一个信号,产生一个非正常终止,即核心转贮。
由于它能使一个进程在出错时记录进程的当前状态,所以可以用
它来作为调试的辅助手段。这也说明了进程可以向自己发送信号
这一事实