Ich lerne System-Programmierung durch Ruby und ich habe Probleme, dieses Verhalten zu verstehen:
%Vor%Dies gibt aus wie erwartet:
%Vor%Wenn ich jedoch Process.detach auskommentiere, scheint der Kindprozess nur einmal (und nach Beendigung?) auf das Signal zu reagieren:
%Vor%Ich bin verwirrt darüber, warum dies passiert, wenn ich den Prozess nicht abtrenne, obwohl ich ihn viermal gesendet habe. Kann jemand helfen, dieses Verhalten zu erklären? Ich denke, ich verstehe nicht, was es bedeutet, einen Prozess zu lösen.
Vielen Dank!
Es hängt alles vom Timing ab, vermute ich - das heißt, der Unterschied liegt daran, wie die Anweisungen Ihres Hauptprozesses und des gegabelten Prozesses relativ zueinander laufen sollen.
Wenn Sie Process.detach ausführen, wird ein neuer Thread erstellt, der auf das Exit-Ergebnis des angegebenen Prozesses wartet. Sie können die Process.detach durch
ersetzen %Vor%und erhalten den gleichen Effekt. Ich vermute, dass das Aufrufen von detach (und das Erstellen eines neuen Threads) Ihrem gegabelten Prozess als Nebeneffekt die Möglichkeit gibt, geplant zu werden.
Wenn du keine Trennung hast, würde ich meinen, dass dein gegabelter Prozess keine Chance hat, zu laufen, wenn du sagst, dass er stirbt.
Sie können sehen, was ich mit dem relativen Timing meine, indem Sie einige Schlafaufrufe in Ihren Code einfügen, um zu sehen, ob Sie das gleiche beobachtete Verhalten ohne das Trennen erreichen können.
Zum Beispiel scheint dies für mich zu funktionieren, obwohl Ihre Laufleistung abhängig von Ihrer Host-Plattform variieren kann:
%Vor%Dies erzeugt:
%Vor%Tags und Links ruby