[英]How do I stop Ctrl-C from killing spawned processes with jruby?
我有一個ruby程序,產生了新的進程。 即使我按Ctrl-C,我希望這些能夠在父母身上存活下來。 為了實現這一點,我嘗試捕獲INT,但是,這沒有幫助。
每次按Enter鍵時,下面的程序會啟動一個xeyes,如果你寫任何東西則退出,如果按Ctrl-C然后返回則應該退出。
我能做些什么來保持我的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支持,所以我不能使用ruby。 以下方式適用於ruby:
fork { Process.setsid; exec("xeyes") }
'Process setsid'似乎確保沒有控制終端,我懷疑這是核心。 但是,即使使用-J-Djruby.fork.enabled = true標志,我也無法獲得jruby來接受fork。
只有父進程被SIGINT
殺死,子進程正在死亡,因為他們正在發送一個SIGHUP
信號,表明他們的父進程已經死亡。 嘗試通過nohup
命令啟動xeyes。 它將阻止SIGHUP
信號殺死它啟動的進程。
Thread.new { system("nohup xeyes") }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.