场景如下。
发行版是 Raspbian。我在 SSH 会话中启动了一个程序,该程序在屏幕上有连续的输出。然后我暂停它并disown
退出会话,以便关闭我的笔记本电脑并进入睡眠状态。
当我稍后启动新的 SSH 会话时,我可以看到该进程仍然存在,因此我想将其带回前端以查看其状态和进度。
有人能帮我吗?我在 Google 上搜索了很多,并尝试了bg
/ jobs
/ fg
、screen
/等方法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
命令。