Moin, Am Di, den 30.12.2003 schrieb Thorsten Haude um 17:16:
* Joerg Rossdeutscher
[2003-12-30 15:39]: Ich habe mich auf das "-1" verlassen: "...if there is no such child process...", denn den gibt es zu dem Zeitpunkt ja gar nicht mehr. Es ist aber anscheinend so, daß trotzdem die ID zurückgereicht wird, was ich eigentlich bei einer Abfrage auf einen bereits verendeten Prozess komisch finde. There /is/ no such process. It died already! Damned.
Hier hätte ich ganz klar -1 erwartet.
Lies mal die Manpage der C-Funktionen wait() oder waitpid, da steht's besser drin.
Naja, für perl würde ich keine C manpages lesen, denn das ist ja gerne auch mal anders implementiert... In diesem Fall wäre es hilfreich gewesen. %-)
Das Verhalten ist so auch sicherlich wünschenswert, da wait blockiert, solange das Kind nicht stirbt. Wenn Deine Interpretation richtig wäre, würdest Du in alle Ewigkeit warten, wenn das Kind bereits tot ist.
(Oder ist das in Perl anders?)
In diesem Fall anders als du denkst. Du hast überlesen, daß man Options übergeben kann, was ich auch mache. Mit der Flag "NOHANG" kannst du einfach nur nachgucken, ob der Prozess weg ist, es wird aber nicht gewartet. Das führt (gewollt) dazu, daß waitpid ggf. bereits auf eine nicht mehr existierende ID angesetzt wird. perldoc definiert dafür laut Doku einen Rückgabewert von -1, was nicht stimmt. In Wirklichkeit ergibt waitpid auf eine gar nicht genutzte PID eben diese PID als Rückgabewert. Das geht auch in C: RETURN VALUE The process ID of the child which exited, or zero if WNOHANG was used and no child was available, or -1 on error (in which case errno is set to an appropriate value). Hier steht dann auch klar "-1 on error". Dagegen in perldoc "-1 if there is no such child process". Das sind ganz klar unterschiedliche Behauptungen. Ein terminiertes Child ist kein Error. Ohne das jetzt zu testen: -1 kommt wahrscheinlich, wenn ich auf negative, leere oder nicht-integer PIDs teste, oder sowas. In Wahrheit verhalten sich beide Sprachen gleich. Und zwar so, wie die C Doku behauptet. Seht ihr das auch so? Dann schicke ich das an perlbug@perl.org Gruß, Ratti -- -o) fontlinge | Font management for Linux | Schriftenverwaltung in Linux /\\ http://freshmeat.net/projects/fontlinge/ _\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/