从终端会话中恢复正在运行的脚本

Fdo*_*Fdo 35 linux bash terminal gnu-screen

所以我使用GNU Screen来管理多个正在运行的脚本/程序。多路复用和可拆卸性非常有用。

我从磁盘中删除了一个脚本,现在我在查找备份时遇到了一些麻烦。但是,其中一个终端会话在删除文件之前正在执行脚本,并且它继续正常工作。

有没有办法劫持当前正在运行脚本的终端会话来恢复这个文件的内容?

小智 61

使用以下命令查找脚本的 pid ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh
Run Code Online (Sandbox Code Playgroud)

检查/proc/$PID/fd/; 应该有一个到脚本文件的断开链接,但cat 应该可以工作(在脚本运行时!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!
Run Code Online (Sandbox Code Playgroud)

祝你好运!

  • @c4f4t0r 与它是否加载到内存中无关。当有打开的句柄时,Linux 明确不会删除文件(inode)——文件保留在磁盘上,占用空间。`rm` 和其他工具 *unlink* 文件,删除文件 *name* 到实际数据的链接(由 inode 引用),但只要引用存在(硬链接或打开句柄),inode 不会被删除. (12认同)
  • @gardenhead 这是一个例子。 (2认同)