Bash 进程 - 重新连接进程在后台启动

Bash 进程 - 重新连接进程在后台启动

有没有办法将使用 & 从终端启动的进程重新连接到特定终端?例如,我通过以下方式启动 Kate:

kate &

现在我想将该进程重新附加到给定的终端。

答案1

这里有两个问题:

1) 因HUP导致死亡并避免:

如果您在 shell 中启动程序,然后结束该 shell,则所有子进程都将被终止。这包括在后台运行的程序。(那些在命令末尾以 & 开头的程序,如kate &示例中的,还有您使用controlz和暂停的进程bg)。

一旦关闭外壳,两者都会死亡。*1

您可以通过启动后台程序来解决这个问题disown。它将继续运行,但您无法再将其返回到 shell 的前台。

您可以使用 nohup(例如nohup kate &)将程序的输出保存在文件中。但完全重新连接到 shell 也不再可能。


2)终端仿真器。

您还可以启动一个程序,该程序本身模拟终端,并且是专门构建的,以便您可以重新连接到它。screentmux就是两个例子。

屏幕使用示例:

  • 登录或 ssh 到主机。
  • screen (启动屏幕。默认情况下,这将启动一个新的 shell)。
  • kate(凯特开始)。
  • ControlAD(分离屏幕,您将返回到第一次登录时所看到的相同提示。)
  • logout

走到另一台计算机,或者几个小时后回来。(或两者:)) - 登录或 ssh 到主机。 - screen -r (重新连接屏幕。您现在回到运行 Kate 的 shell。

屏幕的有用命令:

screen -d
从屏幕程序外部分离屏幕。
使用 ControlAD从屏幕内部分离。

screen -r 重新连接到屏幕(例如从不同的位置)

screen -dr
如果有连接的屏幕,则先将其卸下。然后在本地连接。如果
您忘记在办公室卸下它并从家里登录,则很有用 ;)

screen -x
附加到正在运行的屏幕而不关闭其他会话。对于共享调试、帮助会话等很有用。


*1:编辑:当我回答这个问题时,我假设所有 shell 都会向其所有子进程发送 sigHUP。然而,这是一个选项,并且根据 shell 的不同,它可能可以被配置。在某些情况下,它甚至不再是默认的。

示例 1:在 bash 中,你可以通过 buildin 命令配置此选项购物。 (shopt -s huponexit)。

示例 2:使用 zsh 你想要setoptHUP

答案2

fg将某些内容从当前终端的背景移到前台。

相关内容