微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我能否在C中使用sigaction的标志siginfo和SIGCHLD获得终止进程的信号int常量例如SIGINT或SIGKILL?

如何解决我能否在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 举报,一经查实,本站将立刻删除。