Capturando o código de status de saída do processo filho
Eu tenho uma função que bifurca um processo, duplica os descritores de arquivo para buffers de entrada e saída e, em seguida, executaexecl
em um comando transmitido por meio de uma string chamadacmd
:
static pid_t
c2b_popen4(const char* cmd, int pin[2], int pout[2], int perr[2], int flags)
{
pid_t ret = fork();
if (ret < 0) {
fprintf(stderr, "fork() failed!\n");
return ret;
}
else if (ret == 0) {
/*
Assign file descriptors to child pipes (not shown)...
*/
execl("/bin/sh", "/bin/sh", "-c", cmd, NULL);
fprintf(stderr, "execl() failed!\n");
exit(EXIT_FAILURE);
}
else {
/*
Close parent read and write pipes (not shown)...
*/
return ret;
}
return ret;
}
Cada um doscmd
instâncias processam meus dados corretamente, desde que minhas entradas de teste estejam corretas.
Quando dados incorretos são passados para um processo filho, meu programa pai é executado até a conclusão e sai com um código de status sem erro 0.
Se eu deliberadamente colocar uma entrada ruim - tentar propositadamente obter um doscmd
instâncias falhem da maneira esperada - eu gostaria de saber como capturar o status de saída dessacmd
para que eu possa emitir o código de status de erro correto do programa pai, antes da finalização.
Como isso geralmente é feito?