ton*_*gpu 953
您应该寻找像tmux.
tmux优于screen很多原因,这里只是一些例子:
要获得与推荐答案中解释的相同的功能screen,您需要执行以下操作:
tmux输入tmuxtmux会话中启动您想要的进程tmux通过输入Ctrl+b然后离开/分离会话d 您现在可以安全地从远程机器注销,您的进程将继续在tmux. 当您再次回来并想要检查您的流程状态时,您可以使用tmux attach它附加到您的tmux会话中。
如果您希望多个会话并行运行,您应该使用Ctrl+b和命名每个会话$。您可以使用 获取当前正在运行的会话的列表tmux list-sessions,现在使用命令附加到正在运行的会话tmux attach-session -t <session-name>。
tmux可以做比在单个会话中处理单个窗口更高级的事情。有关更多信息,请查看man tmux或tmux GitHub 页面。特别是,这里有一个关于screen和之间主要区别的常见问题解答tmux。
cot*_*eyr 447
nohup最好的方法往往是最简单的。
nohup long-running-command &
Run Code Online (Sandbox Code Playgroud)
它是专门为此而制作的,它甚至将标准输出记录到nohup.log.
man nohup
Run Code Online (Sandbox Code Playgroud)
bg+disownnohup long-running-command &
Run Code Online (Sandbox Code Playgroud)
如果你想“后台”已经运行的任务,那么Ctrl+Z然后运行bg将你最近挂起的任务放到后台,让它继续运行。disown将在您注销后保持进程运行。该-h标志可防止挂断。
screen其他人可以做到,但这不是他们的目的。nohup对于您知道将要放弃bg的任务,以及您已经在运行且不想重新开始的任务,我建议您使用这些任务。
请记住,两者都是 bash 特定的。如果您不使用 bash,则命令可能会有所不同。
Lin*_*oln 244
你可以通过使用来做到这一点screen。
键入man screen以了解更多信息或阅读此屏幕手册页。
简单场景:
ssh 进入你的远程盒子。输入screen然后开始你想要的过程。
按Ctrl-A然后Ctrl- D。这将“分离”您的屏幕会话,但让您的进程继续运行。您现在可以退出远程框。
如果您想稍后回来,请再次登录并键入screen -r这将“恢复”您的屏幕会话,您可以看到您的过程的输出。
小智 94
Screen 和 nohup 是更好的方法,但是如果您必须分离已经在没有 screen 或 nohup 的情况下运行的进程,您可以运行 disown 命令。
disown [-ar] [-h] [jobspec… |pid… ]如果没有选项,请从活动作业表中删除每个作业规范。如果
-h给出该选项,则作业不会从表中删除,但会被标记,以便在 shell 收到 SIGHUP 时不会将 SIGHUP 发送到作业。如果jobspec不存在,并且既-a没有-r提供也没有提供选项,则使用当前作业。如果没有提供jobspec,则该-a选项表示删除或标记所有作业;-r没有jobspec参数的选项将操作限制为正在运行的作业。
使用 disown 您可以关闭终端并使进程在机器上运行。
Cha*_*aos 75
我被困在一个很大的 mv 中,所以我无法停止该过程,设置屏幕,然后再次启动它。通过基本上执行以下步骤,我设法退出了 SSH 会话,进程正在运行:
ssh user@hostbg将暂停的进程置于后台并恢复它。disown [pid](进程 ID 是可选的,默认为最后一个进程)以拒绝进程。要获取工作列表,只需输入jobs之前。logout。的用法disown命令:
disown [-ar] [-h] [jobspec ... | pid ... ]
Without options, remove each jobspec from the table of active
jobs. If jobspec is not present, and neither the -a nor the -r
option is supplied, the current job is used. If the -h option
is given, each jobspec is not removed from the table, but is
marked so that SIGHUP is not sent to the job if the shell
receives a SIGHUP. If no jobspec is supplied, the -a option
means to remove or mark all jobs; the -r option without a job?
spec argument restricts operation to running jobs. The return
value is 0 unless a jobspec does not specify a valid job.
Run Code Online (Sandbox Code Playgroud)
Sid*_*aRT 24
您可以使用两个主要程序来维护多个 ssh 连接上的程序和终端状态。它们是 screen(现有的,但不幸的是没有维护。显然现在正在积极开发)和 tmux(更新,积极维护)。Byobu 是一个前端,可以在这些系统之上运行并提供额外的 ubuntu 状态信息。在新安装中,它将使用 tmux 作为后端,如果您安装了较旧的 byobu 和现有配置,它将维护以前的后端,无论是 screen 还是 tmux。
Byobu 可以通过在基于 Debian 的机器上安装到计算机上:
sudo aptitude install byobu
Run Code Online (Sandbox Code Playgroud)
使用 yum,你可以
su -c 'yum install byobu'
Run Code Online (Sandbox Code Playgroud)
也可以在其他发行版上安装 byobu。
byobu使用 ssh 连接后,您可以通过在主机上运行来启动 byobu 。这将为您提供一个如下所示的外壳:

您还可以在带有 -X 选项的 Ubuntu 机器上使用 Byobu 终端,并轻松拥有完美运行的 byobu。
通过键入启动byobu byobu。
您可以按 F2 在当前会话中创建一个新窗口,按 F3-F4 在各个窗口之间切换。
关于 byobu 最好的部分是,您不必实际杀死在终端中运行的进程即可离开终端。您可以简单地将 screen/tmux(byobu 的骨架)发送到后台并在您下次来时继续:
要离开 byobu 并使其保持运行(分离),请按 F6。
下次你来的时候,就这样做byobu,你应该回到你原来的地方。

您还可以通过byobu -S session1等等创建各种byobu会话。当你回来时,你可以连接到它们中的任何一个。
您可以使用 Byobu 做更多事情。用它!一些权威指南在这里,或在这里。
Ric*_*way 19
一旦流程开始,您就无法执行此操作,您需要在运行长时间运行的作业之前进行设置。
您可以使用nohup但现代智慧建议您使用 screen 或 byobu 作为您的登录名,以便您可以分离并保持运行。
Screen 的优点是您可以从一台机器上分离并从另一台机器上重新连接,如果您想检查在工作日结束后运行的长时间运行的进程,这很方便。
这里有一个合理的入门指南来筛选。
byobu在带有菜单等的屏幕顶部放置了一个易于使用的界面。这也是较新的 ubuntu 上 screen 的当前实现。F2 启动新端子 F3/F4 来回切换,F6 断开连接。键入 exit 以实际永久结束终端。
小智 9
对于我运行了很长时间的单个 shell 脚本,我将登录并使用“&”在后台运行该进程。
例子:
/path/to/my/script &
Run Code Online (Sandbox Code Playgroud)
我已经注销并断开了我的 SSH 会话。当我在一段时间后登录时,脚本仍在执行,正如从脚本中连续收集数据所证明的那样。
小智 8
嘿,虽然我同意屏幕是最有效的选择。你可以使用 vncserver 然后启动进程就可以了。
此外,如果您唯一的兴趣是让进程运行而无需控制它,最重要的是,您不知道您需要关闭会话并且您的进程已经在运行,如果你用 bash 作为 shell
首先,您需要通过键入 Ctrl+Z 后跟 bg %1 将进程发送到后台(数字取决于作业编号,通常为 1,但您可以使用命令作业轻松拉出列表)
最后调用 disown 命令(后跟 jobid ...与 bg 命令相同)
这将删除您的 shell 和后台进程之间的父子关系,防止它在您的 shell 终止时死亡。