linux的常用信号量
BUS与SEGV
二者都是错误信号,BUS表示总线错误,SEGV表示段错误,程序崩溃的时候99%都是这两个错误导
致的。进程可以捕获和封锁这两类错误。内核对二者的默认处理是memory dumpWINCH
窗口改变信号(WINdown CHanged)。例如虚拟终端的行数发生变化时将发送WINCH信号,绝大多数
文本编辑器都能捕获WINCH信号自动进行重新配置。内核的默认处理是忽略该信号,并且不进行内存
转储。
进程可以捕获或者封锁该信号KILL
杀死/删除进程,编号为9STOP
挂起/暂停正在执行的进程,直到收到CONT为止
KILL STOP都不能够被捕获、封锁或者忽略,默认处理都不会产生内存转储。CONT
取消挂起,继续执行进程TSTP
是STOP信号的“软”版本,即在用户输入Ctrl+Z时由终端驱动程序发送的信号。捕获到该信号的进程通常
清除它们的状态,如何给自己发送一个STOP信号。TSTP的默认处理不会导致内存转储。INT
中断信号,编号为2
当用户输入Ctrl+C时由终端驱动程序发送INT信号
INT信号是终止当前操作的请求,简单程序捕获到INT信号时应该退出,拥有命令行或者输入模式的那些
程序应该停止他们正在做的事情,清除状态,并等待用户再次输入。TERM
软件终止信号,编号为15
TERM是请求彻底终止某项操作的信号,它期望进程清楚自己的状态并退出QUIT
退出信号,编号为3
与TERM类似,不同之处在于QUIT信号的默认处理是内存转储,而TERM信号的默认处理没有内存转储。HUP
挂起信号,编号为1,有两种解释:
守护进程理解HUP为重新设置的请求,如果守护进程能够不用重新启动就能够重新读取它自己的配置文
件并调整自己以适应变化的话,那么HUP信号通常可以用来触发这种行为HUP
信号有时有终端驱动程序生成,试图用来清除(也就是终止)跟某个特定终端相连接的那些进程。例如
当一个终端会话结束时,或者当一个Modem的连接不经意的断开时,就可能出现这种情况。
如果需要某些进程在会话结束之后继续运行,那么在C Shell中设法让这些进程变成后台程序,
ksh或者bash中可以用nohup来模拟这种行为。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
进程的四种状态runnable(可运行状态)
只要有CPU时间,进程就可以执行。一旦进程执行了不能立即完成的系统调用,Linux会把进程转入
睡眠状态sleeping(睡眠状态)
进程在等待某些事件发生(如终端输入、网络连接)zombie(僵化状态)
进程已经执行完毕并试图消亡,但是状态没有收集完stopped(停止状态)
进程被挂起,不允许执行。进程收到STOP或者TSTP信号即进入停止状态,可以用CONT信号来重新启动
2023-07-25 广告