EmacsのkillとはEmacsプロセスの終了を意味します。端末からEmacsを開始した場合には、通常は親プロセスの制御が再開されます。Emacsをkillする低レベルなプリミティブはkill-emacs
です。
このコマンドはフック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がオペレーティングシステムのシグナルSIGTERM
やSIGHUP
を受け取った場合(たとえば制御端末が切断されたとき)や、batchモードで実行中にSIGINT
を受け取った場合(batchモードを参照)にも自動的にこれが呼び出される。
このノーマルフックはEmacsのkillの前にkill-emacs
により実行される。
kill-emacs
はユーザーとの対話が不可能な状況(たとえば端末が切断されたとき)で呼び出されるかもしれないので、このフックの関数はユーザーとの対話を試みるべきではない。Emacsシャットダウン時にユーザーと対話したければ下記のkill-emacs-query-functions
を使用すること。
Emacsをkillしたときには保存されたファイルを除きEmacsプロセス内のすべての情報が失われます。うっかりEmacsをkillすることで大量の作業が失われるので、save-buffers-kill-terminal
コマンドは保存を要するバッファーがあったり実行中のサブプロセスがある場合には確認の問い合わせを行います。これはアブノーマルフックkill-emacs-query-functions
も実行します。
save-buffers-kill-terminal
がEmacsをkillする際には標準の質問を尋ねた後、kill-emacs
を呼び出す前にこのフック内の関数を呼び出す。関数は出現順に引数なしで呼び出される。関数はそれぞれ追加でユーザーから確認を求めることができる。それらのいずれかがnil
をリターンするとsave-buffers-kill-emacs
はEmacsをkillせずに、このフック内の残りの関数は実行されない。直接kill-emacs
を呼び出すとフックは実行されない。
このコマンドはsave-buffers-kill-emacs
と同じことを行うが、最後にカレントEmacsプロセスをkillするだけではなく、カレントで実行中のEmacsプロセスと同じコマンドライン引数を用いて新たなEmacsプロセスを再起動する点が異なる。