【问题标题】:How to detect that a child process has crashed?如何检测子进程已经崩溃?
【发布时间】:2015-12-17 15:52:51
【问题描述】:

子进程可以:

  • 正常退出(通过使用exit(0)exit(22)exit(23) 退出)——这显然是我的应用程序特有的
  • 异常退出(代码抛出异常、接收到未处理的信号、核心转储等...)

我正在从父进程执行 fork/exec 并在 waitpid 上循环,当我检测到子进程已退出时,我想确定它退出的原因。

目前我检查WEXITSTATUS(status)(其中statuswaitpid返回)以确定退出代码。

有没有办法可靠地检测孩子是否异常退出?

【问题讨论】:

    标签: c linux


    【解决方案1】:

    您可以查看WIFSIGNALED(status)。要对此进行测试,请查看 Test cases in C for WIFSIGNALED, WIFSTOPPED, WIFCONTINUED

    当然,您也可以使用WIFEXITED(status) 对正常终止进行肯定检查。

    【讨论】:

    • 这是否足以检测进程是否在没有收到信号的情况下崩溃?
    • @Kam:没有这样的事情。 “崩溃”不是技术概念。
    • @Kam 如果您的程序崩溃,它应该这样做,例如使用 SIGSEGV 或 SIGBUS。
    • @Kam 欢迎您。当您测试我的建议对您有用时,请随时接受我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多