端末にアクセスせずに一時的なemacsファイルを保存する

端末にアクセスせずに一時的なemacsファイルを保存する

端末にアクセスできず、アクセスできなくなったEmacsスクラッチバッファの内容を保存しようとしています。

私のLinuxマシンでは、SSH経由でサーバーに接続し、Emacsを起動しました。私のLinuxボックスは今停止されていますが、SSHを介してサーバー上でアクティブなEmacsプロセスを見ることができます。

Emacsに直接アクセスせずに一時コンテンツをダンプ/保存する方法はありますか?私は2つのアイデアを持っています:

  1. Emacsがコアをダンプし、コアを再ロードするようにプロセスにシグナルを送信します(その後、ステージングを保存します)。
  2. プロセスの標準入力にキーストロークを送信し、Emacsプロセスにファイルを保存するように指示します(例:via)echo "abd" > /proc/<pid>/fd/0。 2つの端末を開こうとしましたが、ターゲット端末にキーストロークが表示されましたが、Emacsはそれをキャッチできませんでした。

ベストアンサー1

実行中のプロセスにgdbをリンクする幸運がありました。以下で大量の借入が発生しました。分離したプロセスに端末を接続するには?

ファイルの書き込み

  1. mkfifo /tmp/some_name
  2. gdb -p [pid]
  3. (gdb内):call close(0)
  4. (gdb内部):.call open('/tmp/some_name', 0600)このときgdbは停止します。
  5. (シェルから):echo '(write-file "savedresults")' > /tmp/some_name
  6. (GBD内):ctrl-d

スクラップの内容は「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は停止します。
  5. (シェルから):(cmd="^X^Wsavedresults"キーシーケンスを介して^ Xを入力:CTRL-V CTRL-X、^ W」に類似
  6. (シェルから):echo "$cmd" > /tmp/some_name
  7. (GBD内):ctrl-d

内容は「savedresults」ファイルに書き込まれます。

おすすめ記事