繁体   English   中英

使用SIGCHLD的sigaction知道孩子何时终止,但无法分辨孩子SIGSEV何时

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM