Я новичок в программировании LINUX C, моя задача - написать программу о процессе.Как поймать сигнал действия термина в родительском процессе?
Мне нужно обработать два процесса: родительский и детский.
Моя цель - разрешить родительскому процессу процесс (дочерний процесс), а затем дочерний процесс для выполнения программы, которая может завершиться с ошибкой. Родительский процесс ждет дочерний процесс, чтобы завершить работу, и получить сигнал, который запускается из дочернего сигнала, например, прервать или сегментировать ошибку.
Однако у меня возникают некоторые проблемы.
Я обнаружил, что сигнал «Core Action» может быть легко обнаружен, но «Term action» не может быть обнаружен !!
Сигнал «Действие по окончании действия», такой как SIGALRM (14) или SIGINT (2), не может быть обнаружен. Кажется, что это классифицируется как завершенный успех.
Вот мой код:
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <cstring>
#include <errno.h>
using namespace std;
bool check = true;
void mySignal(int sig){
int status;
pid_t childPid = wait(&status) ;
if(WIFEXITED(status)){
printf("The child is terminated success!!\n");
}
else{
if(WIFSIGNALED(status)){
int termsig = WTERMSIG(status) ;
printf("termsig = %d %d\n",status, termsig) ;
}
}
check = false ;
}
int main(int argc , char *argv[]){
signal(SIGCHLD, mySignal) ;
pid_t pid = fork() ;
if(pid < 0){
printf("fork error\n");
exit(-1) ;
}
else if(pid == 0){
execl(argv[1], NULL);
exit(0) ;
}
while(check) ;
return 0 ;
}
Кто-нибудь знает, как решить эту проблему ??
Oh !! Спасибо за ваше напоминание! Я рассмотрю эту проблему :) – ChihMin
@ChihMin не забудьте подтвердить ответ, если кто-то исправил вашу проблему. – Mekap