Emacsを強制終了するにはどうすればよいですか?


7

私はしばしば、不完全または無効なemacs構成に気づきkill-emacs、エラーで停止するなどの通常の動作を壊します。

この場合、PIDを探し出しkillてシェルからaを発行することなく、emacsを強制的に殺したいと思います。純粋なEmacs Lispでこれを行うことはできますか?


私がフォローしているのかわかりません。kill-emacsうまくいかない場合、他のelispアプローチも失敗する可能性がありますkill-emacs。どのようなエラーが発生しますか?エラーを修正する方が簡単な場合があります。
タイラー

つまりkill -9、たとえば現在のEmacs pidを呼び出す関数を作成できます。あなたはそれを壊すために非常にめちゃくちゃにする必要があります。
PythonNut 14

5
を呼び出す前にに設定kill-emacs-hookしてみてください。EmacsのPIDを使用して取得し、 " "で呼び出すことにより、自殺させることもできます。nilkill-emacsemacs-pidcall-processkill -9
コンスタンティン

1
PIDをハントしたくない場合でも、pkillとpgrepがあります。\
Nsukami _

1
無関係ですが、emacsの複数セッションの実行を避けたい場合があります
Sean Allred

回答:


12

を呼び出す前にに設定kill-emacs-hookしてみてください。nilkill-emacs

(defun really-kill-emacs ()
  "Like `kill-emacs', but ignores `kill-emacs-hook'."
  (interactive)
  (let (kill-emacs-hook)
    (kill-emacs)))

または、EmacsのPIDを使用して取得し、 " " を使用emacs-pidして自殺させることもできます。call-processkill -9

(defun brutally-kill-emacs ()
  "Use `call-process' to send ourselves a KILL signal."
  (interactive)
  (call-process "kill" nil nil nil "-9" (number-to-string (emacs-pid))))

3
ない答えの批判、ちょうど追加情報:信号9(使用していることを注記-9ではkill -9)Emacsは、簡単なシェルスクリプトであれば、それを実現するのと同じように...、Emacsを生み出したことをすべてのプロセスを孤立します
ショーン・オールレッド

TERMはしばしば壊れた状態でemacsを殺すことに失敗しますが。だからそれだけかもしれない。
PythonNut 14

1

時々、到達できないいくつかのemacsプロセスが配置されることになります。私のemacsclientは通常、自動的にemacsを起動して呼び出しますserver-start-私の設定のどこかにバグがあり、これが2回以上発生しています。

killall emacsは殻で余分なエマセンを殺します。これまでのところ、-9必要ありませんでした。(実行中のemacが1つだけの場合にも機能し、pidを探す必要はありません!)


時々、emacsが完全にハングするとき、a -9が必要です。もちろん、これはemacsが自殺できないことを意味しますが、念のために追加します。
PythonNut 14

これがein:jupyter-notebook他のすべての方法を妨げていた後に私のために働いた唯一のことでした。どこかにぶら下がっていたと思いますが、すでにすべてのPythonプロセスを終了し、すべてのバッファを強制終了しました。
n1k31t4 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.