有没有办法找出程序在收到终止信号 HUP 时会做什么?
无需简单地运行命令 ofc :D
例如,
killall -HUP pppd
将重新启动 pppd
killall -HUP firefox
只会杀死 firefox
Gil*_*il' 53
阅读其文档。这是唯一的办法。正如Keith 已经写过的那样,SIGHUP 的本意是用户失去了对程序的访问权限,因此交互式程序应该死掉。守护进程——不直接与用户交互的程序——不需要这种行为,而是经常在收到 SIGHUP 时重新加载它们的配置文件。但这些只是约定俗成。
如果你有源,你也可以阅读。或者,如果您只有二进制文件,您可以尝试反汇编它,查找为sigaction
设置信号处理程序的调用SIGHUP
,并尝试弄清楚这些信号处理程序在做什么。首先安排不向该程序发送 SIGHUP 会更容易。
在任何时间点,对于特定信号,给定进程处于以下三种状态之一:忽略它、执行默认操作或运行自定义处理程序。许多 unice 允许您使用 来查看进程的信号掩码ps
,例如ps s
在 Linux 上使用。这可以告诉您进程是否忽略信号或将在 SIGHUP 上立即死亡,但是如果进程设置了处理程序,您将无法知道处理程序做了什么。
Kei*_*ith 20
默认操作是在 SIGHUP 上终止进程。有关man 7 signal
更多详细信息,请参阅。但是程序可以捕获它并为所欲为。由于守护进程永远不应该退出,因此它们通常将 SIGHUP 用于其他目的,例如重新初始化自己(如 pppd 所做的那样)。Firefox 保留默认操作。