1

我有一个问题,一个简单的 nohup 命令似乎表现得很奇怪。我将其归结为一个名为 Sleep 的小型 Java 应用程序,它执行

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

如果在我的原始窗口中输入“退出”以关闭 shell,我会看到进程继续运行而没有收到信号。但是,如果我关闭腻子窗口(单击菜单栏上的 x),我会看到 nohup 进程确实得到了 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 工作不正常,这在我正在处理的实际问题中造成了一些严重的问题。

4

1 回答 1

0

在 Java 中处理这个问题......请注意,尽管线程表明这将适用于任何操作系统,但我怀疑 Windows 是否有信号: Ignore SIGINT in Java

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

这一次,这可能不是 windows/putty 问题。

于 2012-07-20T21:07:15.270 回答