ich eine Funktion haben, die einen Prozess Gabeln, Duplikate Filedeskriptoren für Eingangs- und Ausgangspuffer, und läuft dann execl
auf einem Befehl über einen String übergeben in cmd
genannt:Capturing Ausgang Statuscode Kindprozess
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;
}
Jede der cmd
Instanzen verarbeitet meine Daten korrekt, solange meine Testeingaben korrekt sind.
Wenn schlechte Daten zu einem Kind-Prozess übergeben wird, meine Eltern Programm wird mit einem nicht-Fehlerstatuscode von 0.
bis zur Fertigstellung und Ausfahrt läuft Wenn ich absichtlich in schlechten Eingang setzen - gezielt versuchen, zu erhalten eine der cmd
Instanzen in einer erwarteten Weise fehlschlagen - Ich würde gerne wissen, wie Sie den Exit-Status dieser cmd
erfassen, so dass ich den richtigen Fehlerstatuscode aus dem übergeordneten Programm vor der Beendigung ausgeben kann.
Wie wird das generell gemacht?
Wenn ich Ihren ersten Code-Block (das „zum Beispiel“ Beispiel) ausgeführt wird, hängt der Prozess auf dem 'waitpid()' Anruf. –
@AlexReynolds: Das ist, wie es standardmäßig funktioniert, siehe Update zu beantworten. Sie werden eine Art von Strategie müssen zum Nachweis und dann mit der Möglichkeit der Child-Prozesse zu tun endet früh. –