Когда мне нужно использовать waitpid, если я использую execl — дочерний процесс, для завершения которого может потребоваться время?
Когда я использую waitpid в родительском, он дает мне дочерний процесс, поскольку возвращаемое значение из waitpid равно 0. Через некоторое время я пытаюсь использовать waitpid в другой функции, где она возвращает мне -1 с ECHILD. Когда я должен использовать waitpid, если я не уверен, что ребенок погоды завершен или нет?
//pid_t Checksum_pid = fork();
Checksum_pid = fork();
if (Checksum_pid == 0)
{
execl(path, name, argument as needed, ,NULL);
exit(EXIT_SUCCESS);
}
else if (Checksum_pid > 0)
{
pid_t returnValue = waitpid(Checksum_pid, &childStatus, WNOHANG);
if ( returnValue > 0)
{
if (WIFEXITED(childStatus))
{
printf("Exit Code: _ WEXITSTATUS(childStatus)") ;
}
}
else if ( returnValue == 0)
{
//Send positive response with routine status running (0x03)
printf("Child process still running") ;
}
else
{
if ( errno == ECHILD )
{
printf(" Error ECHILD!!") ;
}
else if ( errno == EINTR )
{
// other real errors handled here.
printf(" Error EINTR!!") ;
}
else
{
printf("Error EINVAL!!") ;
}
}
}
else
{
/* Fork failed. */
printf("Fork Failed") ;
}
exit(EXIT_SUCCESS);
послеexecl()
— неверный индикатор; еслиexecl()
возвращается, это значит, что он потерпел неудачу, поэтому вам действительно следует выйти сexit(EXIT_FAILURE);
, чтобы сообщить родительскому процессу, что вы потерпели неудачу. - person Jonathan Leffler   schedule 27.03.2014