首页 文章

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

提问于
浏览
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

如果在我的原始窗口中我输入'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

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

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

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

相关问题