如果我登录到远程 Linux 机器,我知道我可以挂起一个进程 (cntr-z) 并将其移到后台 (bg 1) 但如果我与机器断开连接,进程就会停止。
有没有办法可以将它留在后台并在我重新登录时将其保留在那里?这是一个很长的运行过程。
在 Ubuntu 上,通过 SSH 登录。
小智 10
这是因为您的程序需要终端才能运行,您可以使用GNU Screen创建一个虚拟终端,这样即使您断开连接,程序也能继续运行。
只需运行screen your_program_name
,您可以关闭屏幕,crtl-a-d
然后稍后重新打开它screen -rx
不如屏幕灵活nohup
和disown
。
nohup
是一个程序,您必须像这样启动长时间运行的 jub:
$ nohup longjob --options-for-longjob
Run Code Online (Sandbox Code Playgroud)
它会导致你的长时间工作在后台运行,而不是连接到任何终端(这意味着你不会在屏幕上从它获得任何输出,也无法从键盘直接输入)
disown
是一个 bash 内置程序,可以在您启动它后断开长时间运行的作业。我的 bash 手册页说
disown [-ar] [-h] [jobspec ...]
如果没有选项,每个 jobspec 都会从活动作业表中删除。如果给出了 -h 选项,则不会从表中删除每个作业规范,而是将其标记为在 shell 收到 SIGHUP 时不会将 SIGHUP 发送到作业。如果不存在 jobspec,并且既没有提供 -a 也没有提供 -r 选项,则使用当前作业。如果没有提供jobspec, -a 选项表示删除或标记所有作业;不带 job-spec 参数的 -r 选项将操作限制为正在运行的作业。除非作业规范未指定有效作业,否则返回值为 0。