我有一个在前台运行的进程。我想知道是否可以退出 Bash,
- (当然)不会像往常一样杀死前台进程并退出,并且
- 无需终止终端程序,或者如果连接是通过客户端(如 iTerm2 或 PuTTY)进行远程连接,则无需终止所述客户端。
我知道如果我没有运行前台进程,我可以通过 Ctrl-d 或发出 轻松发送传输结束exit
。我想知道这在前台进程运行时是否可行。
答案1
前台进程意味着服务器以下属性,并且这些属性与终端绑定。
- 与用户交互。
- 将文本输入提供给主伪设备,供连接到从属伪设备的 shell(例如 bash)使用。
- 从主伪设备读取文本输出并将其显示给用户。
所以我认为这是不可能的。或者将您的进程作为守护进程运行,并将输出提供给特定的终端和/或文件,就像安装过程一样。
答案2
除了screen
/tmux
还有nohup
.它更简单,但有时更好,具体取决于您的具体情况。看这里:nohup 与 Screen更多细节。
请注意,这nohup
将使进程保持在前台,但您将无法与其交互或查看终端上的输出。要在后台启动进程,请&
在启动进程时添加(即nohup <your command here> &
)。
如果进程已经在运行,您可以通过按(停止进程)然后按命令(将停止的进程发送到后台)nohup
重新获得对终端的访问权限。Ctrl+Z
bg
编辑(在OP评论之后):我不确定我是否理解这个场景,但也许你可以尝试:
- 打开终端窗口(一些 shell 将在里面启动)
- 在该窗口内显式启动另一个 shell(例如 bash)
- 在第二个 shell 中启动前台进程(没有任何
nohup
s 等) - 打开另一个终端窗口
- 识别“中间”shell(它将是被测试进程的父进程)
- 向“中间”shell 发送终止信号。
这会将测试的进程变成“半守护进程”,并让您可以访问第一个终端窗口中的顶级 shell。请注意,测试的进程仍然附加到终端,因此当您关闭窗口时它将终止。