退出 shell,进程在前台运行

退出 shell,进程在前台运行

我有一个在前台运行的进程。我想知道是否可以退出 Bash,

  1. (当然)不会像往常一样杀死前台进程并退出,并且
  2. 无需终止终端程序,或者如果连接是通过客户端(如 iTerm2 或 PuTTY)进行远程连接,则无需终止所述客户端。

我知道如果我没有运行前台进程,我可以通过 Ctrl-d 或发出 轻松发送传输结束exit。我想知道这在前台进程运行时是否可行。

答案1

前台进程意味着服务器以下属性,并且这些属性与终端绑定。

  • 与用户交互。
  • 将文本输入提供给主伪设备,供连接到从属伪设备的 shell(例如 bash)使用。
  • 从主伪设备读取文本输出并将其显示给用户。

所以我认为这是不可能的。或者将您的进程作为守护进程运行,并将输出提供给特定的终端和/或文件,就像安装过程一样。

答案2

除了screen/tmux还有nohup.它更简单,但有时更好,具体取决于您的具体情况。看这里:nohup 与 Screen更多细节。

请注意,这nohup将使进程保持在前台,但您将无法与其交互或查看终端上的输出。要在后台启动进程,请&在启动进程时添加(即nohup <your command here> &)。

如果进程已经在运行,您可以通过按(停止进程)然后按命令(将停止的进程发送到后台)nohup重新获得对终端的访问权限。Ctrl+Zbg

编辑(在OP评论之后):我不确定我是否理解这个场景,但也许你可以尝试:

  1. 打开终端窗口(一些 shell 将在里面启动)
  2. 在该窗口内显式启动另一个 shell(例如 bash)
  3. 在第二个 shell 中启动前台进程(没有任何nohups 等)
  4. 打开另一个终端窗口
  5. 识别“中间”shell(它将是被测试进程的父进程)
  6. 向“中间”shell 发送终止信号。

这会将测试的进程变成“半守护进程”,并让您可以访问第一个终端窗口中的顶级 shell。请注意,测试的进程仍然附加到终端,因此当您关闭窗口时它将终止。

相关内容