Ваш вопрос немного неясен, но вы можете использовать WIFSIGNALED()
, чтобы проверить, получил ли дочерний процесс какой-либо сигнал или нет, если WIFSIGNALED(status)
истинно, означает, что дочерний процесс завершается ненормально любым сигналом.
if(fork() == 0 ) {
/*... */
/* send the exit status of child by calling exit()*/
}
else {
int status;
wait(&status);/* here parent collect exit status , now parent wants to know--> normal termination or abnormal */
if(WIFEXITED(status)) { /* true if terminates normally */
printf("normally terminates\n",WEXITSTATUS(status));
}
if(WIFSIGNALED(status)) { /* if child terminated bcz of any other signal */
printf("terminated by signal\n",WTERMSIG(status));// bcz of what signal
}
}
Чтобы узнать, получил ли ребенок SIGSEGV
без дампа памяти, в приведенном выше коде, как только ребенок получит SIGSEGV
, вы можете установить обработчик сигнала, вызвав sigaction()
и сделав некоторые вещи.