Python 捕获信号示例
通常用于循环执行的服务中。直接插入以下代码
import signal
def shutdownFunction(signalnum, frame):
pass
for sig in [signal.SIGINT, signal.SIGHUP, signal.SIGTERM, signal.SIGKILL]:
signal.signal(sig, shutdownFunction)
具体的 signal 使用参见这篇文章。
对于*nix
系统,主要捕获这下面的退出信号即可:
[
signal.SIGINT, # 键盘中 Ctrl-C 组合键信号
signal.SIGHUP, # nohup 守护进程发出的关闭信号
signal.SIGTERM, # 命令行数据 kill pid 时的信号
]
Linux 部分终止信号说明
- 信号 值 处理动作 发出信号的原因
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 终止信号
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 后台进程企图从控制终端写