如何在Linux中终止其他进程时收到通知

时间:2013-03-07 15:40:38

标签: linux posix opensuse

我正在运行一个流程,我希望从中获得另一个流程终止的通知。 在windows中我们可以使用WaitForSingleObject,通过传递我们所处理的终止进程的句柄。我是Linux世界的新手,请提出一些方法。

4 个答案:

答案 0 :(得分:1)

值得查看supervisord

答案 1 :(得分:1)

在Linux(实际上大多数是* NIXen)上,您只能等待当前进程的子进程,除非您具有root权限(或允许一般跟踪的有效功能) - 这可以通过功能系统进行安排授予完全root权限,但需要有意识地配置它...),您可以使用ptrace()附加到任意进程以监视它们。

答案 2 :(得分:0)

如果您可以在子进程中获取子进程的进程ID,则可以将其保存到子进程内的文件中,并在父进程中从那里读取它。然后在父进程中,您可以以ps ax | cut -b 1-5 | grep fooprocessid以固定间隔轮询子进程的存在。当然存在更优雅的方法,但这适用于任何编程语言,在子进程中可以获取进程ID,在父进程中可以执行命令。

如果您知道可以使用ps(或top)找到的一些详细信息,并将子进程与所有其他进程区分开来,那么您甚至不需要进程ID子进程,ps ax | grep foo就足够了。或者ps和其他一些参数,取决于你对儿童过程的了解细节。

答案 3 :(得分:0)

您可以使用多种Linux API来执行此操作。以下是其中一些:

  • Netlink流程连接器-这个API可以精确地执行您想要的操作,但是在跟踪详细信息的短期流程方面存在问题
  • 审核API-默认情况下,在大多数发行版中启用的内核API,可以将每个系统调用的事件发送到用户模式(如果采用这种方式,则需要跟踪类似exec和fork的系统调用)
  • tracepoints和kprobes-两个内核调试API,可用于获取有关进程生命周期事件的信息
  • 基于ebpf的解决方案-可以与跟踪点/ kprobes结合使用,以过滤内核中的事件或运行各种逻辑
  • 基于ptrace的解决方案-这些解决方案包括简单的ptrace调试以及seccomp API

确实有太多细节无法在一个StackOverflow答案中正确比较这些选项,但是我已经written about this in detail on my blog