Warum unterbricht Ruby-Prozess selbst mit Ruby-Prozess mit Kind unter Verwendung von Anruf erstellt zu system
nicht unterbricht? Sie sollten zur selben Gruppe gehören, also sollten beide unterbrochen werden. Dies gilt auch nicht für ruby2.0.Interrupt Kind aus Ruby
Bei Rubin 1.8.7 Patch 371, Rubin 1.9.3 Patch 392 und ruby2.0 Patch 0:
Lauf ruby1.8 -e 'system "sleep 100"; p $?; sleep'
in bash und drücken ^C tötet nur inneren Ruf zu sleep 100
.
Ruby 1.9 verhält sich identisch.
Obwohl läuft ruby2.0 -e 'system "sleep 100"; p $?; sleep'
Interrupts sowohl innere Befehl und Ruby-Prozess itself.2.0.0 -p0
--EDIT--
Lese Quellen Ich habe festgestellt, dass die Handhabung SIGINT
, SIGQUIT
und SIGHUP
ist Switched in rb_syswait
Methode ignoriert, die dann auf den erstellten Subprozess wartet und dann Handler wiederherstellt (rb_syswait
in ruby v1.8.7-p370, ruby v1.9.3-p362 und ohne blockierende Handler in ruby v2.0.0-p0).
Warum ist es geschehen und warum nur für system
und IO.popen
, nicht %x{}
oder fork{}
?
Möchten Sie Implementierungsdetails wissen oder wie funktioniert das? –
@SemyonPerepelitsa: beide + was als normales Verhalten betrachtet werden sollte – tig
@SemyonPerepelitsa jetzt nur, warum ist es getan und die besten Umgehungslösungen – tig