プロセスの削除を行うと、Emacsは直ちにサブプロセスとの接続を切断します。プロセスは終了後に自動的に削除されますが、必ずしも即座に削除されるとは限りません。また、いつでも明示的にプロセスを削除できます。自動的に削除される前に、終了したプロセスを明示的に削除しても、特に問題はありません。実行中のプロセスを削除すると、そのプロセス(および子プロセスがある場合はそれらも)を終了させるシグナルが送信され、プロセスセンチネルが呼び出されます。センチネル:プロセスの状態変化の検出を参照してください。
プロセスが削除されても、他のLispオブジェクトがそれを指している限り、プロセスオブジェクト自体は存在し続けます。プロセスオブジェクトを操作するすべてのLispプリミティブは、削除済みのプロセスも受け付けますが、I/Oやシグナル送信を行うものはエラーを報告します。プロセスマークは引き続き以前と同じ場所(通常はプロセスからの出力が挿入されていたバッファ)を指し続けます。
この変数は、終了したプロセス(exitの呼び出しやシグナルによるもの)の自動削除を制御します。値がnilの場合、ユーザーがlist-processesを実行するまでプロセスは存続し続けます。それ以外の場合は、終了直後に削除されます。
この関数はプロセスを削除し、当該プロセスがプログラムを実行していた場合は SIGKILL
シグナルで強制終了させます。引数には、プロセス、プロセス名、バッファ、またはバッファ名を指定できます。(バッファまたはバッファ名は get-buffer-process が返すプロセスを指し、指定がない場合や nil または process
が指定されている場合は、現在のバッファのプロセスを強制終了させることを意味します。)実行中のプロセスに対して delete-process
を呼び出すと、そのプロセスが終了し、プロセスステータスが更新され、直ちにセンチネルが実行されます。プロセスが既に終了している場合、delete-process
を呼び出してもステータスやセンチネルの実行(いずれにせよ実行されます)に影響はありません。
プロセスオブジェクトがネットワーク、シリアル、またはパイプ接続を表す場合、そのステータスはclosedに変更されます。それ以外の場合はsignalに変更されますが、プロセスが既に終了している場合はこの限りではありません。process-statusを参照してください。
(delete-process "*shell*")
⇒ nil