Next: , Up: Getting Out   [Contents][Index]


38.2.1 Emacsのkill

EmacsのkillとはEmacsプロセスの終了を意味します。端末からEmacsを開始した場合には、通常は親プロセスの制御が再開されます。Emacsをkillする低レベルなプリミティブはkill-emacsです。

Command: kill-emacs &optional exit-data

このコマンドはフックkill-emacs-hookを呼び出してからEmacsプロセスをexitしてkillする。

exit-dataが整数ならEmacsプロセスのexitステータスとして使用される(これは主にbatch処理で有用。Batch Modeを参照)。

exit-dataが文字列なら内容は端末の入力バッファーに詰め込まれるので、shell(や何であれ次の入力を読み込むプログラム)が読み込むことができる。

関数kill-emacsは通常はより高レベルなコマンドC-x C-c (save-buffers-kill-terminal)を通じて呼び出される。Exiting in The GNU Emacs Manualを参照のこと。これはEmacsがオペレーティングシステムのシグナルSIGTERMSIGHUPを受け取った場合(たとえば制御端末が切断されたとき)や、batchモードで実行中にSIGINTを受け取った場合(Batch Modeを参照)にも自動的にこれが呼び出される。

Variable: kill-emacs-hook

このノーマルフックはEmacsのkillの前にkill-emacsにより実行される。

kill-emacsはユーザーとの対話が不可能な状況(たとえば端末が切断されたとき)で呼び出されるかもしれないので、このフックの関数はユーザーとの対話を試みるべきではない。Emacsシャットダウン時にユーザーと対話したければ下記のkill-emacs-query-functionsを使用すること。

Emacsをkillしたときには保存されたファイルを除きEmacsプロセス内のすべての情報が失われます。うっかりEmacsをkillすることで大量の作業が失われるので、save-buffers-kill-terminalコマンドは保存を要するバッファーがあったり実行中のサブプロセスがある場合には確認の問い合わせを行います。これはアブノーマルフックkill-emacs-query-functionsも実行します。

Variable: kill-emacs-query-functions

save-buffers-kill-terminalがEmacsをkillする際には標準の質問を尋ねた後、kill-emacsを呼び出す前にこのフック内の関数を呼び出す。関数は出現順に引数なしで呼び出される。関数はそれぞれ追加でユーザーから確認を求めることができる。それらのいずれかがnilをリターンするとsave-buffers-kill-emacsはEmacsをkillせずに、このフック内の残りの関数は実行されない。直接kill-emacsを呼び出すとフックは実行されない。