【问题标题】:background process terminates after closing ssh client [duplicate]关闭 ssh 客户端后后台进程终止 [重复]
【发布时间】:2013-08-13 11:03:02
【问题描述】:

我的问题与我在 SO hereherehere 上找到的问题相同。但是,对我来说nohup 不起作用。编译 screen 会出现错误,并且对于 disown,Control+Z 不会使进程“停止”。

我运行一个数据生成二进制文件,它将数据写入文件并在屏幕上打印状态消息(stdout)。我尝试了以下

nohup ./sp2b <options for sp2b> > output &

当我退出终端并重新登录时,该进程已经被终止。我其实也想计时,所以想做

nohup time ./sp2b <options for sp2b> > output &

为什么 nohup 在我的情况下不起作用?

【问题讨论】:

标签: linux shell process ssh background-process


【解决方案1】:

nohup 的问题在于,如果您不将输出发送到&gt; /dev/null 2&gt;&amp;1 然后它将保持输出进程打开(它将输出到 nohup.out)。所以如果你关闭终端,你也关闭了输出进程。

例子:

nohup node somescrip.js >/dev/null 2>&1 &

【讨论】:

    【解决方案2】:

    也许可以尝试这样的事情,而不是 screen 使用 tmux(屏幕的更现代替代品),因为您没有 root,我们将在本地安装它。

    mkdir tmp && cd tmp;
    aptitude download tmux;
    ar x tmux_*
    tar xvf data.tar.gz
    

    现在你可以试试./usr/bin/tmux,希望你会安装依赖项,tmux 只有几个。这在我的机器上工作。

    【讨论】:

    • 感谢您的回复。我试过这个,但是 tmux 依赖于 libevent 并且没有安装在我们的服务器上。尽管我可以编译并生成 libevent 的二进制文件并将其放置在本地,但我认为没有选项可以让 tmux 在该文件夹中查找 libevent(?)。为什么你认为 nohup 选项对我不起作用?
    • 是的,这可以通过更改导出 LD_LIBRARY_PATH 变量来实现。你可以设置export LD_LIBRARY_PATH=/my/libevent/path:$LD_LIBRARY_PATH
    • 为什么进程没有响应NOHUPsuspend 信号,我不知道,我不是专家。虽然可以显式忽略这些信号,但默认行为是尊重它们。这是他们的节目吗:dbis.informatik.uni-freiburg.de/index.php?project=SP2B
    • 谢谢,我会试试的。是的,这就是程序:)
    • 我用/.sp2b_gen -t 5000000000000000 对我进行了测试,挂起效果很好,这是正确的可执行文件吗?