Perché interrompere il processo ruby con child creato utilizzando la chiamata a system
non interrompe il processo ruby stesso? Dovrebbero appartenere allo stesso gruppo, quindi dovrebbero essere entrambi interrotti. Inoltre, questo non è valido per Ruby2.0.Interrupt child called from ruby
Dato rubino 1.8.7 patch di 371, ruby 1.9.3 patch di 392 e ruby2.0 patch di 0:
esecuzione ruby1.8 -e 'system "sleep 100"; p $?; sleep'
in bash e premendo ^C uccide solo chiamata interiore a sleep 100
.
Ruby 1.9 si comporta in modo identico.
Sebbene esecuzione ruby2.0 -e 'system "sleep 100"; p $?; sleep'
allarmi sia di comando interno e processo rubino itself.2.0.0-p0
--EDIT--
lettura fonti ho trovato che il trattamento SIGINT
, SIGQUIT
e SIGHUP
è passato a ignorato nel metodo rb_syswait
che attende il completamento del processo secondario creato e quindi ripristina i gestori (rb_syswait
in ruby v1.8.7-p370, ruby v1.9.3-p362 e senza bloccare i gestori in ruby v2.0.0-p0).
Perché si fa e perché solo per system
e IO.popen
, non %x{}
o fork{}
?
Vuoi conoscere i dettagli dell'implementazione o come risolvere il problema? –
@SemyonPerepelitsa: entrambi + cosa dovrebbe essere considerato comportamento normale – tig
@SemyonPerepelitsa ora solo perché è fatto e le soluzioni migliori migliori – tig