Я пробовал некоторые операции процесса, такие как fork () и exec (). Я пробовал этот пример, в котором родительский метод wait () возвращает своего потомка и проверяет, нормально ли завершился его потомок (путем exit () ing иливозврат к вызывающей стороне) или ненормально (получая сигнал типа SIGABRT)
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include <sys/wait.h>
int spawn (char* program, char** arg_list)
{
pid_t child_pid;
child_pid = fork ();
if (child_pid != 0)
return child_pid;
else {
execvp (program, arg_list);
abort();
}
}
int main ()
{
int child_status;
char* arg_list[] = {"ls","/",NULL};
spawn ("ls", arg_list);
wait (&child_status);
if (WIFEXITED (child_status))
printf ("the child process exited normally, with exit code %d\n",
WEXITSTATUS (child_status));
else
printf ("the child process exited abnormally\n");
return 0;
}
Я ожидаю увидеть предложение «дочерний процесс завершился ненормально», но я увидел «дочерний процесс завершился нормально, с кодом выхода 0»!!!даже если ребенок закончил с вызовом abort (), который посылает SIGABRT любую помощь?заранее спасибо