![为什么重新连接 ssh 后作业会丢失?](https://linux22.com/image/211355/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%87%8D%E6%96%B0%E8%BF%9E%E6%8E%A5%20ssh%20%E5%90%8E%E4%BD%9C%E4%B8%9A%E4%BC%9A%E4%B8%A2%E5%A4%B1%EF%BC%9F.png)
我有一个通过 ctrl + z 和 bg 在后台运行的作业,重新连接 ssh 后,我无法在 jobs 命令中找到该作业,但可以在 ps grep 中找到它。现在,我搜索了这个,我得到 tmux 可能是一个更好的解决方案,但是,我仍然想知道为什么 exit ssh 会丢失 jobs 命令中的作业。我已经把它放在后台了,重新连接后它应该存在,对吗?
答案1
Shell 作业不直接属于用户。我的意思是,没有针对用户的全局工作列表。作业可以是属于用户的进程,您可以找到属于该用户的所有进程。但每一份工作作为一份工作属于某个 shell 进程,shell 保留一个列表并跟踪其作业。如果shell进程终止,作业进程可能会存活;但这只是“历史上”的一个工作,因为现在没有包含此过程的工作列表。
当您断开连接时,shell 进程将终止。当您再次连接时,会出现新的shell 进程已为您创建。新进程对任何其他 shell 进程(仍在运行或已终止)的作业一无所知。没有任何机制允许新 shell 采纳另一个 shell 的作业。
外壳在内部tmux
或screen
可以在断开连接后继续存在。当您再次连接时,您将重新获得访问权限完全相同的贝壳。每个人都会记得自己的工作,就好像什么都没发生一样,因为从他们的角度来看什么也没有发生。