将不再拥有的进程置于前台

将不再拥有的进程置于前台

场景如下。

发行版是 Raspbian。我在 SSH 会话中启动了一个程序,该程序在屏幕上有连续的输出。然后我暂停它并disown退出会话,以便关闭我的笔记本电脑并进入睡眠状态。

当我稍后启动新的 SSH 会话时,我可以看到该进程仍然存在,因此我想将其带回前端以查看其状态和进度。

有人能帮我吗?我在 Google 上搜索了很多,并尝试了bg/ jobs/ fgscreen/等方法tmux(在发出命令之前我没有使用过它们)。它们都不起作用。

我尝试reptyr使用-T选项,因为目标进程有子进程。失败了:

pi@raspberrypi:~ $ sudo reptyr 1583 -T
[-] Child is not connected to a pseudo-TTY. Unable to steal TTY.
Unable to attach to pid 1583: Invalid argument

答案1

您需要screen先运行。这将允许您分离整个会话并能够再次启动它。如果您没有安装 screen,您可以通过运行来安装它:

sudo apt-get install screen

安装后,首先运行screen。这将在伪终端中打开一个新的 shell。启动程序后,按Ctrl-A D将会话与屏幕分离。现在您可以安全注销,程序将继续运行。

要恢复,请重新通过 SSH 登录并运行screen -r。您将回到上次中断的位置并可以看到当前输出。

另一个选择是运行屏幕,但运行程序的方式如下:

mypgm > output.log 2>&1 &

这将在后台运行程序,并将所有输出和错误重定向到output.log

然后您可以通过运行来查看进度tail -f output.log

按下Ctrl-C退出tail -f命令。

相关内容