Next: Output from Processes, Previous: Input to Processes, Up: Processes [Contents][Index]
サブプロセスへのシグナル送信(sending a
signal)はプロセス活動に割り込む手段の1つです。異なる複数のシグナルがあり、それぞれが独自に意味をもちます。シグナルのセットとそれらの意味はオペレーティングシステムにより定義されます。たとえばシグナルSIGINT
はユーザーがC-cをタイプしたか、それに類似する何かが発生したことを意味します。
各シグナルはサブプロセスに標準的な効果をもちます。ほとんどのシグナルはサブプロセスをkillしますが、かわりに実行を停止(や再開)するものもいくつかあります。ほとんどのシグナルはオプションでプログラムでハンドル(処理)することができます。プログラムがそのシグナルをハンドルする場合には、その影響についてわたしたちは一般的には何も言うことはできません。
このセクション内の関数を呼び出すことにより明示的にシグナルを送信できます。Emacsも特定のタイミングで自動的にシグナルを送信します。バッファーのkillにより、それに関連するプロセスにはSIGHUP
シグナル、Emacsのkillにより残されたすべてのプロセスにSIGHUP
シグナルが送信されます(SIGHUP
は通常はユーザーが“hung
up the phone”、電話を切った、つまり接続を断ったことを示す)。
シグナル送信関数はそれぞれprocessとcurrent-groupいう2つのオプション引数を受け取ります。
引数processはプロセス、プロセス名、バッファー、バッファー名、またはnil
のいずれかでなければなりません。バッファーやバッファー名はget-buffer-process
を通じて得られるプロセスを意味します。nil
はカレントバッファーに関連付けられたプロセスを意味します。stop-process
and
continue-process
を除いて、processがプロセスを識別しない、あるいはネットワーク接続、シリアル接続、pipe接続を表す場合にはエラーがシグナルされます。
引数current-groupは、Emacsのサブプロセスとしてジョブ制御shell(job-control
shell)を実行中の場合に異なる処理を行うためのフラグです。これが非nil
なら、そのシグナルはEmacsがサブプロセスとの対話に使用する端末のカレントプロセスグループに送信されます。そのプロセスがジョブ制御shellなら、これはそのshellのカレントのsubジョブになります。current-groupがnil
なら、そのシグナルはEmacs自身のサブプロセスのプロセスグループに送信されます。そのプロセスがジョブ制御shellなら、それはshell自身になります。current-groupがlambda
なら、端末を所有するもののそれ自身はshellでない場合にはプロセスグループにシグナルを送信します。
サブプロセスとの対話にpipeが使用されている際には、オペレーティングシステムがpipeの区別をサポートしないのでフラグcurrent-groupに効果はありません。同じ理由によりpipeが使用されていればジョブ制御shellは機能しないでしょう。Asynchronous Processesのprocess-connection-type
を参照してください。
この関数はシグナルSIGINT
を送信することによりプロセスprocessに割り込む。Emacs外部ではinterrupt
character(割り込み文字。いくつかのシステムでは通常はC-c、それ以外のシステムではDEL)をタイプすることによりシグナルが送信される。引数current-groupが非nil
のときは、Emacsがサブプロセスと対話する端末上でC-cがタイプされたと考えることができる。
この関数はシグナルSIGKILL
を送信することにより、プロセスprocessをkillする。このシグナルは即座にサブプロセスをkillしてサブプロセスでハンドルすることはできない。
この関数はプロセスprocessにシグナルSIGQUIT
を送信する。これはEmacs外部ではquit
character(通常はC-\)により送信されるシグナル。
この関数は指定したprocessを停止する。それがプログラムを実行中の実際のサブプロセスなら、そのサブプロセスにシグナルSIGTSTP
を送信する。processがネットワーク接続、シリアル接続、pipe接続を表す場合には、この関数はその接続から到達するデータのハンドリングを抑制する。ネットワークサーバーでは、これは新たな接続をacceptしないことを意味する。通常の実行の再開にはcontinue-process
を使用すること。
ジョブ制御をもつシステム上のEmacs外部ではstop
character(通常はC-z)がSIGTSTP
シグナルを送信する。current-groupが非nil
なら、この関数をサブプロセスとの対話にEmacsが使用する端末上でC-zがタイプされたと考えることができる。
この関数はプロセスprocessの実行を再開する。それがプログラムを実行中の実際のサブプロセスなら、そのサブプロセスにシグナルSIGCONT
を送信する。この関数はprocessが以前に停止されたとみなす。processがネットワーク接続、シリアル接続、pipe接続を表す場合には、この関数はその接続から到達するデータのハンドリングを再開する。シリアル接続ではプロセス停止中に到達したデータは失われるかもしれない。
この関数はプロセスprocessにシグナルを送信する。引数signalはどのシグナルを送信するかを指定する。これは整数、または名前がシグナルであるようなシンボルであること。
process引数にはシステムプロセスID (整数)を指定できる。これによりEmacsの子プロセス以外のプロセスにシグナルを送信できる。System Processesを参照のこと。
非ローカルな非同期プロセスへのシグナル送信が必要になることがあります。これは独自のinterrupt-process
実装を記述することにより可能です。それからその関数をinterrupt-process-functions
に追加する必要があります。
この変数はinterrupt-process
用に呼び出される関数のリスト。関数の引数はinterrupt-process
にたいする引数と同じ。これらの関数はいずれかが非nil
をリターンするまでリスト順に呼び出される。このリスト上で常に最後になるデフォルトの関数はinternal-default-interrupt-process
。
これはTrampがinterrupt-process
を実装するメカニズムである。