Я пытаюсь сделать вилку, которая запускает exec в одном файле, а затем ждет завершения. Если exec в дочернем процессе завершается сигналом, я хочу распечатать сигнал, если программа занимает слишком много времени для выполнения, я хочу распечатать таймаут.waitpid not working- efault error
pid_t pid;
pid = fork();
if(pid == 0) {
//child process
}
else {
alarm(timeout);
int status;
if(wait(pid, &status, 0) == pid) {
alarm(0);
fpw = fopen(testreport, "a+");
if(WIFSIGNALED(status)) {
fprintf(fpw, "Run time errors: signal %d\n", WTERMSIG(status);
}
else {
fprintf(fpw, "Run time errors: none");
}
fclose(fpw);
}
else {
alarm(0);
kill(pid, SIGTERM);
fpw = fopen(testreport, "a+");
fprintf(fpw, "Run time errors: timeout\n");
fclose(fpw);
}
}
Testreport - это ранее объявленный символ * для имени файла. Однако waitpid не работает. Когда я печатаю значение waitpid и возвращаемое значение errno, я получаю -1 и 14 соответственно. Я искал errno 14, и это EFAULT, который указывает, что адрес статуса недействителен. Как это может быть так?