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

Yan*_* Xu 6 linux tmux jobs background-process

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

\n

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

\n

Kam*_*ski 14

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

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

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

  • @YangXu [有 `reptyr`](https://superuser.com/a/1231033/432690),但它不会使该进程成为新 shell 中的作业。 (2认同)
  • @Barmar 这个问题指出“我可以在 ps grep 中找到它”,所以这是一个无论如何都能生存的过程。 (2认同)