Linux 信号
- new,2022-08-31,chenxizhan1995@163.com
信号名称 | 编号 | 含义 | 默认动作 |
---|---|---|---|
HUP | 1 | 终端断线 | Term |
INT | 2 | 中断(同 Ctrl + C ) | Term |
QUIT | 3 | 退出(同 Ctrl + \ ) | Core |
KILL | 9 | 强迫终止 | Term |
TERM | 15 | 终止 | Term |
CONT | 18 | 持续(与STOP相反, fg/bg号令) | Count |
STOP | 19 | 暂停(同 Ctrl + Z ) | Stop |
KILL, STOP 信号不可被阻塞、忽略、捕获。
Term 表示终止进程。Core 表示终止进程并 dump core。Stop 挂起线程,Cont 恢复挂起的线程。
常见信号的常见用途
- SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一会话内的各个作业, 这时它们与控制终端不再关联。
登录Linux时,系统会分配给登录用户一个终端会话(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个会话。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。
这个信号的默认操作为终止进程,因此退出登录之后,前后台进程和后台有终端输出的进程就会中止。
不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也能继续下载。
此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。
比如,向 nginx 进程发送 HUP 信号就可以刷新配置。
-
SIGINT:程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
-
SIGQUIT:和SIGINT类似, 但由QUIT字符(通常是
Ctrl-\
)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。 -
SIGTERM:
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,允许进程做一些必要的清理工作后退出。
shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。SIGTERM 让进程体面的结束,如果进程自己不体面,就用 SIGKILL 帮它体面。
-
SIGCONT:让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符…
-
SIGSTOP:停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.
常用信号快捷键
ctrl-c
发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。ctrl-z
发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。ctrl-d
不是发送信号,而是表示一个特殊的二进制值,表示 EOF。ctrl-\
发送 SIGQUIT 信号给前台进程组中的所有进程,终止前台进程并生成 core 文件。
Key | Function |
---|---|
Ctrl-c | Kill foreground process |
Ctrl-z | Suspend foreground process |
Ctrl-d | Terminate input, or exit shell |
Ctrl-s | Suspend output |
Ctrl-q | Resume output |
Ctrl-o | Discard output |
Ctrl-l | Clear screen |
参考资料
- Linux中的信号
- Linux常用信号快捷键的使用 - fosonR - 博客园
- man 7 signal:overview of signals
- man 1 kill:kill 命令