Benötigen Sie Hilfe, um rubys Process.detach zu verstehen

8

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!

    
ambertch 18.04.2012, 00:28
quelle

1 Antwort

7

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%     
Rich Drummond 18.04.2012, 01:36
quelle

Tags und Links