[英]Using sigaction for SIGCHLD to know when children terminate but unable to tell when the child SIGSEVs
根据sigaction的手册页,如果我们将其与SIGCHLD一起使用,则在处理程序函数中-这是如果我们使用void (*sa_sigaction)(int, siginfo_t *, void *);
siginfo_t
结构的si_code
成员应包含发送信号的原因。
我对这些原因感兴趣...
CLD_EXITED
CLD_KILLED
CLD_DUMPED
现在我的问题是...即使孩子异常退出(即通过执行错误代码导致崩溃),我仍然会得到CLD_EXITED
。 我以为我应该改为CLD_DUMPED
。 至于CLD_KILLED
,如果我杀死一个子进程,我会正确地得到这个。
我想念什么? 在我的父进程中,我需要知道是否有任何子进程突然终止。
我通过尝试写一个空指针引起了突然的错误,但是我需要知道任何异常终止。 不必确切知道它是如何发生的。
CLD_DUMPED
生成?
亲切的问候。
而不是提供给信号处理程序的si_code
,您应该只是查看waitpid
(或其他wait
-family函数之一)的退出状态以确定退出原因。 来自sys/wait.h
的宏W*
应用于状态int
,将告诉您终止的原因。
进程转储核心时导致AFAIK, CLD_DUMPED
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.