在 Linux 上,即使断开连接后我是否仍可以让程序在后台运行?

在 Linux 上,即使断开连接后我是否仍可以让程序在后台运行?

如果我登录到远程 Linux 机器,我知道我可以暂停一个进程(cntr-z)并将其移至后台(bg 1),但如果我断开与机器的连接,该进程就会停止。

有没有办法让我将其留在后台并在我再次登录时保留它?这是一个非常漫长的过程。

在 Ubuntu 上,通过 SSH 登录。

答案1

这是因为你的程序需要终端才能运行,你可以使用GNU 屏幕创建一个虚拟终端,这样即使断开连接后程序仍会继续运行。
只需运行screen your_program_name,您就可以使用 关闭屏幕,crtl-a-d然后稍后使用重新打开它screen -rx

答案2

不如屏幕灵活nohupdisown

nohup是一个程序,你必须像这样启动长期运行的 jub:

$ nohup longjob --options-for-longjob

这会导致你的长时间工作在后台运行,并且未连接至任何终端(这意味着您不会在屏幕上获得任何输出,也无法通过键盘直接输入)

disown是可以断开长时间运行的作业的 bash 内置命令你已经启动了。我的 bash 手册页说

disown [-ar] [-h] [jobspec ...]
如果不带选项,则每个 jobspec 都会从活动作业表中删除。如果给出了 -h 选项,则不会从表中删除每个 jobspec,但会对其进行标记,以便在 shell 收到 SIGHUP 时不会向该作业发送 SIGHUP。如果没有 jobspec,并且没有提供 -a 或 -r 选项,则使用当前作业。如果没有提供 jobspec,则 -a 选项表示删除或标记所有作业;不带 job-spec 参数的 -r 选项将操作限制为正在运行的作业。除非 jobspec 未指定有效作业,否则返回值为 0。

相关内容