我有一个问题,一个简单的 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 工作不正常,这在我正在处理的实际问题中造成了一些严重的问题。