无需访问终端即可保存临时 emacs 文件

Tre*_*ent 5 emacs tty

我正在尝试保存 Emacs 暂存缓冲区的内容,由于无法访问的终端,我无法再访问该缓冲区。

在我的 Linux 机器上,我通过 ssh 连接到服务器,并启动了 Emacs。我的 Linux 机器现在已经冻结,但是我仍然可以看到 Emacs 进程在通过 ssh 连接的服务器上处于活动状态。

有没有办法让 Emacs 在没有直接访问的情况下转储/保存其临时文件的内容?我有两个想法:

  1. 向进程发送信号,以便 Emacs 转储其核心,然后重新加载核心(然后保存草稿)
  2. 将击键发送到进程的标准输入,这将指示 Emacs 进程保存文件,即:通过echo "abd" > /proc/<pid>/fd/0. 我通过打开两个终端进行了尝试,击键出现在目标终端上,但是它们没有被 Emacs 捕获。

Tre*_*ent 3

我很幸运地将 gdb 附加到正在运行的进程中。大量借用:如何将终端附加到分离的进程?

写文件

  1. mkfifo /tmp/some_name
  2. gdb -p [pid]
  3. (在 gdb 内):call close(0)
  4. (在 gdb 内):call open('/tmp/some_name', 0600). 此时gdb会出现hang住的情况
  5. (来自外壳):echo '(write-file "savedresults")' > /tmp/some_name
  6. (在 GBD 内):ctrl-d

scrap 的内容被写到文件“savedresults”中。有趣的(write-file "savedresults")是附加到文件中(不确定为什么)。

Cx CW 名称

  1. mkfifo /tmp/some_name
  2. gdb -p [pid]
  3. (在 gdb 内):call close(0)
  4. (在 gdb 内):call open('/tmp/some_name', 0600). 此时gdb会出现hang住的情况
  5. (从 shell):(cmd="^X^Wsavedresults"通过按键序列输入 ^X:CTRL-V CTRL-X,与 ^W 类似”
  6. (来自外壳):echo "$cmd" > /tmp/some_name
  7. (在 GBD 内):ctrl-d

内容写入文件“savedresults”。