以下就是一张比较完整的Solaris的信号列表:
信号名称 编号 默认处理 描述
SIGHUP 1 Exit 挂起(参加termio(7))
SIGINT 2 Exit 中断(参加termio(7))
SIGQUIT 3 Core 退出(参加termio(7))
SIGILL 4 Core 非法指令
SIGTRAP 5 Core 跟踪或断点异常
SIGABRT 6 Core 异常终止
SIGEMT 7 Core 模拟异常
SIGFPE 8 Core 浮点算数运算异常
SIGKILL 9 Exit 杀掉进程,不能被捕获或忽略
SIGBUS 10 Core 总线错误,不对界地址错误
SIGSEGV 11 Core 段错误——通常是访问非法地址空间
SIGSYS 12 Core 错误的系统调用
SIGPIPE 13 Exit 错误管道
SIGALRM 14 Exit 报警时钟
SIGTERM 15 Exit 终止
SIGUSR1 16 Exit 用户定义的信号1
SIGUSR2 17 Exit 用户定义的信号2
SIGHLD 18 Ignore 子进程状态改变
SIGPWR 19 Ignore 电源失效或重新启动
SIGWINCH 20 Ignore 窗口大小改变
SIGURG 21 Ignore 紧急socket情况
SIGPOLL 22 Exit 可以查询的事件(streamio(7))
SIGIO 22 Exit aioread/aiowrite完成
SIGSTOP 23 Stop 停止(不能被捕获或忽略)
SIGTSTP 24 Stop 停止(作业控制)
SIGCONT 25 Ignore 继续
SIGTTIN 26 Stop 停止——tty输入
SIGTTOU 27 Stop 停止——tty输出
SIGVTALRM 28 Exit 时钟报警——setitimer(2)ITIMER_VIRTUAL报警
SIGPROF 29 Exit Profiling报警——setitimer(2)ITIMER_PROF、ITIME_REPROF
SIGXCPU 30 Core 超出了CPU时间限制
SIGXFSZ 31 Core 超出了文件大小限制
SIGWAITING 32 Ignore 并发信号,Solaris10之前的线程库使用
SIGLWP 33 Ignore 内部LWP信号,Solaris10之前的线程库使用
SIGFREEZE 34 Ignore 检查点挂起
SIGTHAW 35 Ignore 检查点继续
SIGLCANCEL 36 Ignore 撤销
SIGLOST 37 Ignore 资源丢失
SIGRTMIN 38 Exit 优先级最低的实时信号
SIGRTMAX 45 Exit 优先级最高的实时信号
对于信号,Solaris定义了4种默认的处理例程:
- Exit:终止进程
- Core:创建进程的内核映像文件并终止进程
- Stop:挂起进程的执行(通常用于作业控制或调试)
- Ignore:丢弃信号,不采取任何操作,即使信号被阻塞
实际上,除了SIGKILL和SIGSTOP这两个信号外,程序是可以改变其他信号的处理例程的。这就具体要看程序作者是如何处理的了。
虽然信号有这么多,但是实际上信号还分做同步信号和异步信号:
- 同步信号也叫异常信号来自于内核的异常处理例程,担任就是程序内部有问题或者它使用的硬件有问题产生的(这里有问题不是坏掉,比如等待也可是一种)。
- 异步信号一般来自于用户命令,程序和内核的其他地方,比如我们用kill命令发送信号给进程,或者使用快捷键Control+Z来作业控制等等
没有评论:
发表评论