Ich schreibe ein mapreduce-Programm, das mehrere I / O-Pipes (eine Pipe pro Prozess) verwendet, um einige Endergebnisse zu erhalten. Ich habe ein Problem mit der Erstellung der Prozesse. Insbesondere erhalte ich den folgenden Fehler:
%Vor%Dies ist mein Code, der Prozesse hervorbringt:
%Vor%Danach erstelle ich einen Thread
%Vor%Die Funktion threadFunction verwendet die Funktion select (), um herauszufinden, welcher Dateideskriptor zum Lesen bereit ist, und liest ihn ein und legt Daten in ein Wörterbuch.
Wenn Sie den gdb-Debugger ausführen, gibt das Programm Folgendes aus:
%Vor%Ich weiß nicht, wie ich das Problem lösen soll. Irgendwelche Vorschläge?
Danke!
Sie müssen Ihren wait()
Aufruf in eine Schleife setzen und wenn er einen Fehler (-1) und errno == EINTR
zurückgibt, setzen Sie die Schleife fort. Jeder andere Fehler ist ein echter Fehler und sollte als solcher behandelt werden.
Dinge wie das Profilieren von Timern können dazu führen, dass Signale an den Prozess gesendet werden. Das Signal, das wahrscheinlich die Unterbrechung verursacht, ist SIGCHLD
, das, wie Sie wissen, aufgerufen wird, wenn ein untergeordneter Prozess den Status ändert / p>
EDIT: OK, ich schreibe die Antwort im Code:
%Vor%