簡體   English   中英

如何阻止Ctrl-C使用jruby殺死生成的進程?

[英]How do I stop Ctrl-C from killing spawned processes with jruby?

我有一個ruby程序,產生了新的進程。 即使我按Ctrl-C,我希望這些能夠在父母身上存活下來。 為了實現這一點,我嘗試捕獲INT,但是,這沒有幫助。

每次按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支持,所以我不能使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM