このコードでは、コマンドラインからプログラムを起動し、SIGTERM(通常の終了のシグナル)とは異なるシグナルからプログラムを閉じると、コマンドラインから渡された最初のプログラムを再起動する必要があります。しかし、そうではありません。実際、私のコードは、プログラムが適切に終了したと言ってプログラムを再起動することはありません。実際には、私の条件「if(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;
}