У меня есть программа ruby, порождающая новые процессы.Я хочу, чтобы они пережили своего родителя, даже когда я нажимаю Ctrl-C.Для этого я пытаюсь перехватить INT, однако это не помогает.
Программа ниже запускает xeyes каждый раз, когда вы нажимаете ввод, завершает работу, если вы что-либо пишете, и должна завершать работу, если вы нажимаетеCtrl-C, а затем вернуться.
- Если я выйду обычным способом, кси выживут.
- Если я нажму Ctrl-C, кси умрет.SIGINT, а не SIGHUP, как было предложено.
Что я могу сделать, чтобы мои кси-хэны были живы?
Программа:
#!/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, но так как мне нужна поддержка JMX, которая доступна только с jruby, я не могу использовать ruby как есть.В ruby работает следующий способ:
fork { Process.setsid; exec("xeyes") }
Кажется, что 'Settsid процесса' обеспечивает отсутствие управляющего терминала, и я подозреваю, что он является центральным.Однако мне не удается заставить jruby принять fork, даже используя флаг -J-Djruby.fork.enabled = true.