我有一个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进行testing,但由于我需要JMX支持,只有在jruby中可用,所以我现在不能使用ruby。 下面的方式在Ruby中工作:
fork { Process.setsid; exec("xeyes") }
'stream程setsid'似乎确保没有控制terminal,我怀疑这是中央。 但是,我不能让jruby接受fork,即使使用-J-Djruby.fork.enabled = true标志。
只有父进程被SIGINT
杀死,子进程正在死亡,因为它们被发送了一个SIGHUP
信号,表明它们的父进程已经死亡。 尝试通过nohup
命令启动xeyes。 它将防止SIGHUP
信号杀死它启动的进程。
Thread.new { system("nohup xeyes") }