gpt4 book ai didi

linux - 如何检测进程在 Linux 中以编程方式终止的原因

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:28 25 4
gpt4 key购买 nike

进程由于以下三个原因之一而终止:它们已到达执行结束(正常情况),它们包含未捕获的异常(同步崩溃),或者它们收到了一些它们未处理的信号(异步崩溃) .在程序设计中,我们可以检测至少检测其中每一个的方法(例如,catch 语句、信号处理程序等)。

假设我想设计一个程序,可以在 Linux 中监视另一个程序的执行。通过注意到程序的 PID 从 /proc 中消失,我可以很容易地判断程序是否终止,但我不知道为什么。有没有办法通过观察目标程序来判断终止原因?

最佳答案

主要限制是您需要的详细信息量。在操作系统级别,您基本上只能计算终止进程的退出代码或信号。

根据您的限制,有多种选择:

  1. wait - 允许快速通知(阻止调用或信号),但仅适用于直系子级。

  2. ptrace,直接(相当棘手)或通过 strace 命令;它有局限性,例如单个进程一次只能由一个进程跟踪,但它允许指定要监视的系统调用列表,因此它不需要像默认调用 strace 那样慢。

  3. BSD 进程会计。通常需要 root 权限才能访问,并且绝对需要他们将其打开(它是全局的)。一旦它运行,您可以有效地观察一个文件,该文件为每个完成过程增加一个条目,包括退出代码/信号,以编程方式(acct 结构中的 ac_exitcode 字段)或通过 lastcomm 命令(参见 http://man7.org/linux/man-pages/man1/lastcomm.1.html )。

关于linux - 如何检测进程在 Linux 中以编程方式终止的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55730965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com