为什么重新连接 ssh 后作业会丢失?

为什么重新连接 ssh 后作业会丢失?

我有一个通过 ctrl + z 和 bg 在后台运行的作业,重新连接 ssh 后,我无法在 jobs 命令中找到该作业,但可以在 ps grep 中找到它。现在,我搜索了这个,我得到 tmux 可能是一个更好的解决方案,但是,我仍然想知道为什么 exit ssh 会丢失 jobs 命令中的作业。我已经把它放在后台了,重新连接后它应该存在,对吗?

与 tty/ssh 会话断开连接后如何管理作业?

答案1

Shell 作业不直接属于用户。我的意思是,没有针对用户的全局工作列表。作业可以是属于用户的进程,您可以找到属于该用户的所有进程。但每一份工作作为一份工作属于某个 shell 进程,shell 保留一个列表并跟踪其作业。如果shell进程终止,作业进程可能会存活;但这只是“历史上”的一个工作,因为现在没有包含此过程的工作列表。

当您断开连接时,shell 进程将终止。当您再次连接时,会出现新的shell 进程已为您创建。新进程对任何其他 shell 进程(仍在运行或已终止)的作业一无所知。没有任何机制允许新 sh​​ell 采纳另一个 shell 的作业。

外壳在内部tmuxscreen可以在断开连接后继续存在。当您再次连接时,您将重新获得访问权限完全相同的贝壳。每个人都会记得自己的工作,就好像什么都没发生一样,因为从他们的角度来看什么也没有发生。

相关内容