【问题标题】:reading the exit value of a defunct process读取已失效进程的退出值
【发布时间】:2012-07-05 14:44:50
【问题描述】:

我有一个死进程,现在处于失效状态,这意味着它的父进程还没有读取它的退出值。 (它不会读它)

我知道退出值存储在内核中的某个位置供父进程读取,但是,如果我不是父进程,有没有办法读取该值?

理想情况下,我可以从 shell 或 abritrary C/python/your-favorite-language 程序执行此操作。

[edit]:这不是关于如何收割或杀死孩子的问题。我不在乎它是否用完进程表中的一个插槽。我只想知道它的退出值是多少。即,我想阅读内核中的 task_struct->exit_code。

马修

【问题讨论】:

  • 我认为init 接管了所有僵尸的父级...不过不确定。
  • 不,只有在父母去世后才会接管。这不是我的情况:父级仍在运行,但我知道它不会读取退出值
  • 在solaris中使用preap是小事一桩,虽然不了解Linux

标签: linux zombie-process


【解决方案1】:

您可以做的一件事是发送给父母SIGCHLD,告诉它一个孩子已经死了。如果该程序具有任何质量,它将获得该过程。

kill -s SIGCHLD parentpid

【讨论】:

    【解决方案2】:

    没有。尝试为不是调用进程的子进程之一的进程调用waitpid() 将导致ECHILD。您将需要杀死父进程,使子进程重新成为init 的父进程,随后将获得它。

    【讨论】:

    • 请注意,我不是在研究如何真正的孩子。我不在乎。我只想看看该死的退出值。
    • 这样做需要内核支持;没有用户进程可以直接访问它,除非偶然,例如strace.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2020-02-22
    • 2022-07-17
    • 2015-01-17
    相关资源
    最近更新 更多