gpt4 book ai didi

c - 对 SIGCHLD 使用 sigaction 来了解 child 何时终止但无法判断 child 何时 SIGSEV

转载 作者:太空狗 更新时间:2023-10-29 12:37:53 26 4
gpt4 key购买 nike

根据 sigaction 的手册页,如果我们将它与 SIGCHLD 一起使用,那么在我们的处理函数中 - 这是如果我们使用 void (*sa_sigaction)(int, siginfo_t *, void *);

siginfo_t 结构的 si_code 成员应该包含发送信号的原因。

我对这些原因感兴趣...

CLD_EXITED
CLD_KILLED
CLD_DUMPED

现在我的问题是......即使 child 异常退出(即通过执行错误代码来导致崩溃)我仍然得到 CLD_EXITED。我假设我应该得到 CLD_DUMPED。至于 CLD_KILLED,如果我杀死一个子进程,我会正确地得到这个。

我错过了什么?在我的父进程中,我需要知道是否有任何子进程突然终止。

我通过尝试写入空指针导致了突然错误,但我需要知道任何类型的异常终止。没有必要确切地知道它发生了什么或如何发生的。

什么时候生成CLD_DUMPED

亲切的问候。

最佳答案

而不是给信号处理程序的 si_code,您应该简单地查看 waitpid 的退出状态(或其他 wait-family functions) 来确定退出的原因。 sys/wait.h 中的宏 W* 应用于状态 int 时,会告诉您终止的原因。

关于c - 对 SIGCHLD 使用 sigaction 来了解 child 何时终止但无法判断 child 何时 SIGSEV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732405/

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