[zz]linux中的信号量详解

原文地址:
http://www.diybl.com/course/6_system/linux/Linuxjs/2008627/128768.html

        Linux支持的信号列表如下。很多信号是与机器的体系结构相关的,首先列出的是POSIX.1中列出的信号: 
        信号 值 处理动作 发出信号的原因
        ----------------------------------------------------------------------
        SIGHUP 1 A 终端挂起或者控制进程终止
        SIGINT 2 A 键盘中断(如break键被按下)
        SIGQUIT 3 C 键盘的退出键被按下
        SIGILL 4 C 非法指令
        SIGABRT 6 C 由abort(3)发出的退出指令
        SIGFPE 8 C 浮点异常
        SIGKILL 9 AEF Kill信号
        SIGSEGV 11 C 无效的内存引用
        SIGPIPE 13 A 管道破裂: 写一个没有读端口的管道
        SIGALRM 14 A 由alarm(2)发出的信号
        SIGTERM 15 A 终止信号 网管bitscn_com
        SIGUSR1 30,10,16 A 用户自定义信号1
        SIGUSR2 31,12,17 A 用户自定义信号2
        SIGCHLD 20,17,18 B 子进程结束信号
        SIGCONT 19,18,25 进程继续(曾被停止的进程)
        SIGSTOP 17,19,23 DEF 终止进程
        SIGTSTP 18,20,24 D 控制终端(tty)上按下停止键
        SIGTTIN 21,21,26 D 后台进程企图从控制终端读
        SIGTTOU 22,22,27 D 后台进程企图从控制终端写
 
        下面的信号没在POSIX.1中列出,而在SUSv2列出
 
        信号 值 处理动作 发出信号的原因
        --------------------------------------------------------------------
        SIGBUS 10,7,10 C 总线错误(错误的内存访问)
        SIGPOLL A Sys V定义的Pollable事件,与SIGIO同义
        SIGPROF 27,27,29 A Profiling定时器到
        SIGSYS 12,-,12 C 无效的系统调用 (SVID)
        SIGTRAP 5 C 跟踪/断点捕获
        SIGURG 16,23,21 B Socket出现紧急条件(4.2 BSD)
        SIGVTALRM 26,26,28 A 实际时间报警时钟信号(4.2 BSD)
        SIGXCPU 24,24,30 C 超出设定的CPU时间限制(4.2 BSD)
        SIGXFSZ 25,25,31 C 超出设定的文件大小限制(4.2 BSD)
 
        (对于SIGSYS,SIGXCPU,SIGXFSZ,以及某些机器体系结构下的SIGBUS,Linux缺省的动作是A (terminate),SUSv2 是C (terminate and dump core))。  
      下面是其它的一些信号
 
        信号 值 处理动作 发出信号的原因
        ----------------------------------------------------------------------
        SIGIOT 6 C IO捕获指令,与SIGABRT同义
        SIGEMT 7,-,7
        SIGSTKFLT -,16,- A 协处理器堆栈错误
        SIGIO 23,29,22 A 某I/O操作现在可以进行了(4.2 BSD)
        SIGCLD -,-,18 A 与SIGCHLD同义
        SIGPWR 29,30,19 A 电源故障(System V)
        SIGINFO 29,-,- A 与SIGPWR同义
        SIGLOST -,-,- A 文件锁丢失
        SIGWINCH 28,28,20 B 窗口大小改变(4.3 BSD, Sun)
        SIGUNUSED -,31,- A 未使用的信号(will be SIGSYS)
        (在这里,- 表示信号没有实现;有三个值给出的含义为,第一个值通常在Alpha和Sparc上有效,中间的值对应i386和ppc以及sh,最后一个值对应 mips。信号29在Alpha上为SIGINFO / SIGPWR ,在Sparc上为SIGLOST。) 
        处理动作一项中的字母含义如下
        A 缺省的动作是终止进程
        B 缺省的动作是忽略此信号
        C 缺省的动作是终止进程并进行内核映像转储(dump core)
        D 缺省的动作是停止进程
        E 信号不能被捕获
        F 信号不能被忽略
        上 面介绍的信号是常见系统所支持的。以表格的形式介绍了各种信号的名称、作用及其在默认情况下的处理动作。各种默认处理动作的含义是:终止程序是指进程退 出;忽略该信号是将该信号丢弃,不做处理;停止程序是指程序挂起,进入停止状况以后还能重新进行下去,一般是在调试的过程中(例如ptrace系统调 用);内核映像转储是指将进程数据在内存的映像和进程在内核结构中存储的部分内容以一定格式转储到文件系统,并且进程退出执行,这样做的好处是为程序员提 供了方便,使得他们可以得到进程当时执行时的数据值,允许他们确定转储的原因,并且可以调试他们的程序。
 
        注意 信号SIGKILL和SIGSTOP既不能被捕捉,也不能被忽略。信号SIGIOT与SIGABRT是一个信号。可以看出,同一个信号在不同的系统中值可能不一样,所以建议最好使用为信号定义的名字,而不要直接使用信号的值。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):