我有一个问题,一个简单的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
如果在我的原始窗口中我输入'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 回答
在Java中处理这个问题...请注意,虽然该线程表明这可以在任何操作系统上运行,但我怀疑Windows有信号:Ignore SIGINT in Java
您也可以编写自己的nohup等效项,忽略SIGHUP和SIGINT . 或者您可以下载GNU nohup源并修改它以忽略SIGINT .
这一次,这可能不是一个窗户/腻子问题 .