Linux:如何访问和使用未连接到终端的正在运行的进程,尤其是进程 bash?

Linux:如何访问和使用未连接到终端的正在运行的进程,尤其是进程 bash?

这个问题与我的问题相关

在 KDE 下的 Konsole 中,重新打开崩溃的 bash shell 时,如何控制它获取的 /dev/pts/nn 编号?

现在,由于输入错误,shell bash 再次崩溃。

正如上一个问题所述,bash 在 KDE 桌面的 Konsole 下的窗口中运行。

结果窗户被关闭并消失了。

与以前相比,现在 - 经过一些更新后 - 当我重新打开窗口时,其中的 bash 不会获得与崩溃前相同的 /dev/ptsnn 编号 nn,而是一个新的编号 nn。

这导致新的 bash 没有与崩溃之前相同的历史列表。

因此,我努力解决如何恢复丢失的历史列表的新问题。

我在正在运行的进程列表中找到了

ps -AFlwwc

存在正在运行的 bash 进程

未连接到终端

或附加到 ttyS1。

我必须使这些 bash shell 可访问且可重复使用。

这可能是崩溃的外壳及其历史列表。

我怎样才能做到这一点?

问候

答案1

与以前相比,现在 - 经过一些更新后 - 当我重新打开窗口时,其中的 bash 不会获得与崩溃前相同的 /dev/ptsnn 编号 nn,而是一个新的编号 nn。

这导致新的 bash 没有与崩溃之前相同的历史列表。

不,它不存储,而且 pty 编号无关紧要。Shell 输入历史记录首先不存储在 pty 中 - 它在运行时存储在 shell 进程中,并在退出时写入文件(通常是 ~/.bash_history)。即使您在与之前相同的 tty 或 pty 上启动 bash,它也只会知道它从 ~/.bash_history 读取的输入历史记录 - 它无法从 pty 设备中恢复任何内容。

此外,伪终端是动态分配的,因此即使你确实获得了与之前相同编号的 pty,它也会仍然是一个全新的 pty。当其“主”进程(终端仿真器)退出时,旧 pty 被释放,并且曾经连接到终端的 shell 进程不再运行 - 它们在失去控制终端时自动收到 SIGHUP(“挂断”),就像您手动关闭 Konsole 一样。SIGHUP 上 shell 的默认操作是存储历史记录并退出。

(Bash 的默认设置是完全覆盖历史记录;当使用并发终端时,您可能希望启用该histappend选项以避免一个 shell 覆盖另一个 shell 的历史记录文件。)

附加到 ttyS1 的 bash 进程是一个串行控制台登录。它绝对不是已移动从丢失的 pty 到 ttyS1 ;它始终在 ttyS1 上。

相关内容