我能否在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代码以识别进程的异常中断。