nohup进程在xterm关闭时死亡但在退出时没有死亡

时间:2012-07-20 19:07:49

标签: linux bash putty strace nohup

我有一个问题,一个简单的nohup命令似乎表现得很奇怪。我把它煮成了一个名为Sleep的小型应用程序,用于执行

while (true) 
  Thread.sleep(10000).  

我正在运行nohup,如下所示:

nohup java Sleep.java >> nohup.log 2>&1 &

然后我在另一个窗口中运行strace寻找信号,如下所示寻找我的pid(12345)

strace -tt -p 12345 -enone -e 'signal=!sigchld'
Process 16582 attached - interrupt to quit

如果在我的原始窗口中我输入'exit'来关闭shell,我看到该过程继续运行而没有收到信号。但是,如果我关闭putty窗口(单击菜单栏上的x),我会看到nohup'd进程确实获得了一个SIGHUP

strace -tt -p 16582 -enone -e 'signal=!sigchld'
Process 16582 attached - interrupt to quit
14:54:03.271286 --- SIGINT (Interrupt) @ 0 (0) ---

我认为nohup应该拦截/不传递SIGHUP。我已经切换到使用setsid,无论我如何关闭终端窗口,我都会得到正确的行为。难道我做错了什么?似乎nohup工作不正常导致我正在处理的实际问题中出现一些严重问题。

1 个答案:

答案 0 :(得分:0)

在Java中处理这个问题...请注意,虽然该线程表明这可以在任何操作系统上运行,但我怀疑Windows有信号: Ignore SIGINT in Java

您还可以编写自己的nohup等效项,忽略SIGHUP和SIGINT。或者您可以下载GNU nohup源并修改它以忽略SIGINT。

这一次,这可能不是一个窗户/腻子问题。