从ssh注销后如何使程序继续运行?

omg*_*omg 158 linux ssh bash

可能重复:
在关闭SSH客户端后阻止后台进程停止

我有一个需要很多时间才能完成的程序.它在ssh上以root身份运行.
我希望它在我退出后继续运行,这是否可能,我将如何实现这一目标?

Pau*_*ce. 329

假设您有一个在前台运行的程序,请按ctrl-Z,然后:

[1]+  Stopped                 myprogram
$ disown -h %1
$ bg 1
[1]+ myprogram &
$ logout
Run Code Online (Sandbox Code Playgroud)

如果只有一个作业,则无需指定作业编号.只需使用disown -hbg.

上述步骤的说明:

你按ctrl-Z.系统暂停正在运行的程序,显示作业号和"已停止"消息,并返回到bash提示符.

您键入disown -h %1命令(此处,我使用了a 1,但您使用了Stopped消息中显示的作业编号),这标记了作业,因此它忽略了SIGHUP信号(它不会通过注销而停止).

接下来,bg使用相同的作业号键入命令; 这将恢复程序在后台运行,并显示一条消息确认.

您现在可以注销,它将继续运行..

  • 你按ctrl-Z.系统暂停正在运行的程序,显示作业号和"已停止"消息,并返回到bash提示符.您键入"disown -h%1"命令(这里,我使用了"1",但您使用了"已停止"消息中显示的作业编号),这标记了作业,因此它忽略了SIGHUP信号(登出时不会停止).接下来,使用相同的作业号键入"bg"命令.这将在后台恢复程序的运行,并显示一条消息确认.您现在可以注销,它将继续运行... (13认同)
  • 我测试它,并且不起作用..当我退出时退出... (10认同)
  • 你能解释一下每一步后到底发生了什么? (5认同)
  • @ButtleButkus:你应该能够用`ps x`看到它们 (4认同)
  • ...您应该知道,当您使用"bg"命令时,结果与您在后台使用&符号运行程序的结果相同.它不会有任何输出到stdout所以应该将输出写入文件(如果你不自己重定向,nohup会将标准输出重定向到nohup.out或〜/ nohup.out). (3认同)
  • 这对我不起作用。我注销后,程序从未成功完成。 (2认同)
  • 这不适合我.发现当你注销时,输出流就会死掉,因此你的过程也是如此,即使你"不知道".你可以重定向,例如`foo&>/dev/null&; disown%1`,但要注意重定向缓冲区随着时间的推移变大.有这个问题的解决方案[这里](http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe). (2认同)

pax*_*blo 78

您应该尝试nohup在后台使用并运行它:

nohup sleep 3600 &
Run Code Online (Sandbox Code Playgroud)

  • 是否有办法在再次登录时将此作业恢复到前台? (16认同)
  • 这工作得更好,谢谢!我只说`nohup <my program>` 然后`CTRL-Z` + `bg` 然后我就可以注销了。您可以通过让另一个 ssh 查看 `top` 并查看进程是否继续运行来验证它是否仍在运行 (2认同)

Jan*_*usz 40

我会尝试程序屏幕.

  • 屏幕的替代品是`tmux` (9认同)
  • 这是为什么永远不应该使用仅链接答案的典型代表. (6认同)
  • 即使有非交互式任务,也很高兴看到程序完成没有错误.在断开连接的情况下始终使用屏幕也是一种好习惯. (4认同)
  • 屏幕是一个强大的好工具,但nohup可能更适合此任务。仅当您要求程序是交互式的并且以后可以返回到应用程序时才需要屏幕。老实说,我经常出于与上述问题完全相同的原因而使用屏幕。 (2认同)

dic*_*ciu 14

从后台开始:

./long_running_process options &
Run Code Online (Sandbox Code Playgroud)

在您退出之前拒绝该工作:

disown
Run Code Online (Sandbox Code Playgroud)

  • "disown"只是放弃对作业的控制,它不会改变过程的特权. (2认同)

Mat*_*hen 13

你想要nohup.请参见http://nixcraft.com/linux-software/313-ssh-nohup-connection.html

  • 链接不再有效,但我想这个或多或少是相同的:https://www.cyberciti.biz/tips/nohup-execute-commands-after-you-exit-from-a-shell-prompt。 html (2认同)