我遇到了一个简单的nohup命令似乎表现异常的问题。我已经煮下来到一个名为睡眠Java小应用程序,做了nohup进程在xterm关闭时死亡,但不在出口
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
如果我原来的窗口,我键入“退出”,关闭壳我看到的过程中不断没有得到一个信号运行。但是如果我关闭腻子窗口(点击菜单栏上的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不太正确地工作,这导致了我正在处理的实际问题中的一些严重问题。
关闭腻子窗口似乎会触发一个SIGINT(而不是SIGHUP),而'nohup'不能/不捕捉。 – chepner 2012-07-20 19:18:45
这里似乎有太多的细节。你说如果你ssh进入一个盒子,运行一个长时间运行的进程,例如'nohup sleep 10000&',然后通过关闭客户端来终止你的ssh连接,那么“sleep”进程将被终止?这听起来确实不对。我刚刚测试过,它在我的盒子上工作正常。 (也许chepner是对的,腻子产生了一个不好的信号,在这种情况下,这听起来像是腻子中的一个错误)。 – 2012-07-20 19:19:25