收到kill -HUP时的程序行为?


32

有没有办法找出程序在收到终止信号HUP时将做什么?
无需简单地运行of:D命令

例如,
killall -HUP pppd重新启动pppd
killall -HUP firefox只会杀死firefox

Answers:


47

阅读其文档。那是唯一的方法。正如Keith所写的那样SIGHUP的原始含义是用户失去了对该程序的访问权,因此交互式程序应该死亡。守护程序(不与用户直接交互的程序)不需要这种行为,而在收到SIGHUP时经常重新加载其配置文件。但是这些只是约定。

如果您有资料来源,也可以阅读。或者,如果您只有二进制文件,则可以尝试将其拆解,查找为sigaction设置了信号处理程序的调用SIGHUP,并尝试找出这些信号处理程序在做什么。首先安排不将SIGHUP发送到该程序会更容易。

在任何时间点,相对于特定信号,给定进程都处于三种状态之一:忽略它,执行默认操作或运行自定义处理程序。许多unice允许您使用来查看进程的信号掩码ps,例如ps s在Linux上。这可以告诉您进程是否忽略信号,或者将在SIGHUP上立即终止,但是如果进程设置了处理程序,则您将无法知道该处理程序的作用。


1
SIGHUP可以追溯到拨号调制解调器时代。它表示调制解调器连接已挂断。它仍然适用于断开的连接,但是如今,它很少会因挂断而导致断开连接。P–
BillThor

@bill是的,但是如果SSH会话失去其客户端连接,它也会将其子进程SIGHUP。
基思(Keith)

@Keith:这就是为什么我指出它适用于断开的连接,并且不再由挂断引起的原因。此时将其名称更改为与断开连接相关的名称(例如SIGDCN)会令人困惑。
BillThor

18

默认操作是终止SIGHUP上的进程。请参阅man 7 signal以获取更多详细信息。但是程序可以捕获它并做他们想做的任何事情。由于永远不应退出守护进程,因此它们通常将SIGHUP用于其他目的,例如重新初始化自身(如pppd所做的那样)。Firefox保留默认操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.