В этом коде C я запускаю программу из командной строки, и когда она закрывается от сигнала, отличного от SIGTERM (сигнал для нормального завершения), мой код должен перезапустить исходную программу, переданную из командной строки.Но это не так, на самом деле мой код никогда не перезапускает программу, говоря, что она правильно завершена. На практике мое условие «если (WTERMSIG (status)! = SIGTERM)» работает плохо, ПОЧЕМУ ?????: '(
Это мой код:
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char*argv[])
{
pid_t pid;
int* status=(int*)malloc(sizeof(int));
int term;
if(argc<2)
{
printf("Error: Too few arguments\n");
exit(EXIT_FAILURE);
}
while(1)
{
pid=fork();
if(pid!=0) /*father*/
{
waitpid(pid,status,0);
//term=WIFSIGNALED(status);
if(WIFSIGNALED(status))
{
if(WTERMSIG(status)!=SIGTERM)
{
printf("The program %d ended abnormally:\nRelaunching...\n",pid);
sleep(1);
}
else
printf("The program %d is properly terminated...\n",pid);
break;
}
else
{
printf("Can not read the reason for termination\n");
}
}
else /*child*/
{
execvp(argv[1],argv+1);
exit(EXIT_SUCCESS);
}
}
return 1;
}