Capturando el código de estado de salida del proceso hijo

Tengo una función que bifurca un proceso, duplica los descriptores de archivo para las memorias intermedias de entrada y salida, y luego ejecutaexecl en un comando pasado a través de una cadena llamadacmd:

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 una de lascmd Las instancias procesan mis datos correctamente, siempre que mis entradas de prueba sean correctas.

Cuando se pasan datos incorrectos a un proceso secundario, mi programa principal se ejecutará hasta su finalización y saldrá con un código de estado sin error de 0.

Si deliberadamente puse un mal aporte, para tratar intencionalmente de obtener uno de loscmd las instancias fallan de la manera esperada: me gustaría saber cómo capturar el estado de salida de esacmd para poder emitir el código de estado de error correcto del programa principal, antes de la finalización.

¿Cómo se hace esto generalmente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta