拦截进程中的信号

时间:2012-03-25 21:24:28

标签: c ruby linux signals

如何捕获/拦截从我自己的进程发送到另一个进程的信号?愿意使用C,Ruby或任何Linux软件包。

2 个答案:

答案 0 :(得分:3)

您可以编写一个库包装器来替换系统signal / sigaction调用来拦截信号处理程序的设置并设置您自己的处理程序。收到信号后,您可以完成工作并稍后调用用户处理程序。使用LD_PRELOAD替换系统signal / sigaction例程。

答案 1 :(得分:1)

我认为ptrace(2)系统调用是你想要的。从手册:“在被追踪时,即使信号被忽略,孩子也会在每次信号传递时停止。(例外情况是SIGKILL,它具有通常的效果。)父母将在下次等待时得到通知(2)并且可以在停止时检查和修改子进程。然后父母让孩子继续,可选地忽略传递的信号(或者甚至提供不同的信号)。“