Dans ce code C je lance un programme à partir de la ligne de commande et quand il est fermé à partir d'un signal différent de SIGTERM (signal pour normal fin) mon code devrait relancer le programme initial passé à partir de la ligne de commande. Mais ce n'est pas le cas, en fait mon code ne relance jamais le programme en disant qu'il est correctement terminé. En pratique ma condition "si (WTERMSIG (statut)! = SIGTERM)" fonctionne mal, POURQUOI ????? : '(J'ai un problème avec les macros WIFSIGNALED()/WTERMSIG(), après avoir utilisé waitpid()
Ceci est mon code:.
#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;
}
Problème résolu !! MERCI!!!! – Andrea