如何解决我能否在C中使用sigaction的标志siginfo和SIGCHLD获得终止进程的信号int常量例如SIGINT或SIGKILL?
我试图弄清楚是否可以使用传递给sigaction的自定义SIGCHLD处理程序获得终止子进程的信号,该标志设置为SA_SIGINFO。据我了解,si_status应该根据si_code值报告退出值或信号值。
这是SIGCHLD处理程序的代码:
org.hibernate.dialect.MariaDB53Dialect
现在我的问题是,首先:这样做有可能吗?
第二:如果可以,我可以使用si_status和si_code吗?
解决方法
问题已解决。
新代码段:
static void sigchdl (int sig,siginfo_t *siginfo,void *context)
{
int code = siginfo -> si_code,status = siginfo -> si_status;
printf("si_code: %d\n",code);
printf("si_status: %d\n",status);
if(code == CLD_EXITED) { if(WIFEXITED(status)) printf("Il comando in background con PID: %ld e' terminato normalmente\n",(long)siginfo->si_pid); }
else if(code == CLD_KILLED) {
//2 = SIGINT,9 = SIGKILL,15 = SIGTERM
if(status == 2 || status == 9 || status == 15)
printf("Il comando in background con PID: %ld e' stato terminato dal segnale %d,chiamato da: %d\n",(long)siginfo->si_pid,siginfo -> si_status,getpid());
}
else if(code == CLD_DUMPED) perror("il comando è terminato in modo anormale \n");
}
问题出在WTERMSIG上,导致比赛无用。 状态已经保持信号恒定值。仍然需要进行si_code检查才能识别“信号终止”情况。
也添加了CLD_DUMPED代码以识别进程的异常中断。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。