端末にアクセスできず、アクセスできなくなったEmacsスクラッチバッファの内容を保存しようとしています。
私のLinuxマシンでは、SSH経由でサーバーに接続し、Emacsを起動しました。私のLinuxボックスは今停止されていますが、SSHを介してサーバー上でアクティブなEmacsプロセスを見ることができます。
Emacsに直接アクセスせずに一時コンテンツをダンプ/保存する方法はありますか?私は2つのアイデアを持っています:
- Emacsがコアをダンプし、コアを再ロードするようにプロセスにシグナルを送信します(その後、ステージングを保存します)。
- プロセスの標準入力にキーストロークを送信し、Emacsプロセスにファイルを保存するように指示します(例:via)
echo "abd" > /proc/<pid>/fd/0
。 2つの端末を開こうとしましたが、ターゲット端末にキーストロークが表示されましたが、Emacsはそれをキャッチできませんでした。
ベストアンサー1
実行中のプロセスにgdbをリンクする幸運がありました。以下で大量の借入が発生しました。分離したプロセスに端末を接続するには?
ファイルの書き込み
mkfifo /tmp/some_name
gdb -p [pid]
- (gdb内):
call close(0)
- (gdb内部):.
call open('/tmp/some_name', 0600)
このときgdbは停止します。 - (シェルから):
echo '(write-file "savedresults")' > /tmp/some_name
- (GBD内):
ctrl-d
スクラップの内容は「savedresults」ファイルに書き込まれます。興味深いのは、(write-file "savedresults")
ファイルに追加することです(理由はわかりません)。
Cx CW名
mkfifo /tmp/some_name
gdb -p [pid]
- (gdb内):
call close(0)
- (gdb内部):.
call open('/tmp/some_name', 0600)
このときgdbは停止します。 - (シェルから):(
cmd="^X^Wsavedresults"
キーシーケンスを介して^ Xを入力:CTRL-V CTRL-X、^ W」に類似 - (シェルから):
echo "$cmd" > /tmp/some_name
- (GBD内):
ctrl-d
内容は「savedresults」ファイルに書き込まれます。