Next: , Up: Emacsからの脱出   [Contents][Index]


42.2.1 Emacsのkill

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

Command: kill-emacs &optional exit-data restart

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

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

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

exit-dataが整数や文字列以外、または省略なら成功裏にプログラムが終了したことを示すexitステータス(システム固有)の使用を意味する。

restartが非nilなら最後にexitするだけではなく、カレントで実行中のEmacsプロセスと同じコマンドライン引数で新たなEmacsプロセスを開始する。

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

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も実行します。

User Option: kill-emacs-query-functions

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

Command: restart-emacs

このコマンドはsave-buffers-kill-emacsと同じことを行うが、最後にカレントEmacsプロセスをkillするだけではなく、カレントで実行中のEmacsプロセスと同じコマンドライン引数を用いて新たなEmacsプロセスを再起動する点が異なる。