3
我有一個紅寶石程序,產生新的進程。即使按Ctrl-C,我也希望這些能夠在父母身上生存下來。爲了做到這一點,我試圖陷入INT,但是,這並沒有幫助。如何阻止Ctrl-C使用jruby殺死衍生進程?
下面的程序在你每次按下Enter鍵時啓動一個xeyes,如果你寫了任何東西就退出,如果你按Ctrl-C然後返回,應該退出。
- 如果我以正常方式退出,xeyes會存活。
- 如果我按下Ctrl-C,則Xeyes會死亡。
- 追蹤Xeyes,它確實收到了SIGINT,而不是SIGHUP。
我該如何保持我的xeyes活着?
程序:
#!/usr/bin/jruby
require 'readline'
keep_at_it = true
trap("INT") { puts "\nCtrl-C!" ; keep_at_it = false }
while (keep_at_it) do
line = Readline.readline("Enter for new xeyes, anything else to quit: ", true)
if (line.length == 0 && keep_at_it == true)
Thread.new { system("nohup xeyes >/dev/null 2>/dev/null") }
else
keep_at_it = false
end
end
我一直在使用Ruby測試爲好,但因爲我只需要使用JRuby的JMX支持,多數民衆贊成,因爲,是我不能使用紅寶石。下面的方式工作在紅寶石:
fork { Process.setsid; exec("xeyes") }
'進程setsid'似乎確保沒有控制終端,我懷疑這是中央。但是,我無法讓jruby接受fork,即使使用-J-Djruby.fork.enabled = true標誌。
不,那不是。 nohup補充說,得到了同樣的行爲.. :-( – JenEriC 2011-04-07 14:44:10