Next: , Previous: , Up: Processes   [Contents][Index]


36.8 プロセスへのシグナルの送信

サブプロセスへのシグナル送信(sending a signal)はプロセス活動に割り込む手段の1つです。異なる複数のシグナルがあり、それぞれが独自に意味をもちます。シグナルのセットとそれらの意味はオペレーティングシステムにより定義されます。たとえばシグナルSIGINTはユーザーがC-cをタイプしたか、それに類似する何かが発生したことを意味します。

各シグナルはサブプロセスに標準的な効果をもちます。ほとんどのシグナルはサブプロセスをkillしますが、かわりに実行を停止(や再開)するものもいくつかあります。ほとんどのシグナルはオプションでプログラムでハンドル(処理)することができます。プログラムがそのシグナルをハンドルする場合には、その影響についてわたしたちは一般的には何も言うことはできません。

このセクション内の関数を呼び出すことにより明示的にシグナルを送信できます。Emacsも特定のタイミングで自動的にシグナルを送信します。バッファーのkillにより、それに関連するプロセスにはSIGHUPシグナル、Emacsのkillにより残されたすべてのプロセスにSIGHUPシグナルが送信されます(SIGHUPは通常はユーザーが“hung up the phone”、電話を切った、つまり接続を断ったことを示す)。

シグナル送信関数はそれぞれprocesscurrent-groupいう2つのオプション引数を受け取ります。

引数processはプロセス、プロセス名、バッファー、バッファー名、またはnilのいずれかでなければなりません。バッファーまたはバッファー名は、get-buffer-processを通じて得られるプロセスを意味します。nilは、カレントバッファーに関連付けられたプロセスを意味します。processがプロセスを識別しなければ、エラーがシグナルされます。

引数current-groupは、Emacsのサブプロセスとしてジョブ制御shell(job-control shell)を実行中の場合に、異なる処理を行うためのフラグです。これが非nilなら、そのシグナルはEmacsがサブプロセスとの対話に使用する端末のカレントプロセスグループに送信されます。そのプロセスがジョブ制御shellなら、これはそのshellのカレントのsubジョブになります。nilなら、そのシグナルはEmacs自身のサブプロセスのプロセスグループに送信されます。そのプロセスがジョブ制御shellなら、それはshell自身になります。

サブプロセスとの対話にpipeが使用されている際には、オペレーティングシステムがpipeの区別をサポートしないのでフラグcurrent-groupに効果はありません。同じ理由によりpipeが使用されていればジョブ制御shellは機能しないでしょう。Asynchronous Processesprocess-connection-typeを参照してください。

Function: interrupt-process &optional process current-group

この関数は、シグナルSIGINTを送信することにより、プロセスprocessに割り込む。Emacs外部では、“interrupt character”(割り込み文字。通常いくつかのシステムではC-c、それ以外のシステムではDEL)をタイプすることにより、このシグナルが送信される。引数current-groupが非nilのときは、Emacsがサブプロセスと対話する端末上で“C-cがタイプされた”と考えることができる。

Function: kill-process &optional process current-group

この関数はシグナルSIGKILLを送信することにより、プロセスprocessをkillする。このシグナルは即座にサブプロセスをkillしてサブプロセスでハンドルすることはできない。

Function: quit-process &optional process current-group

この関数は、プロセスprocessにシグナルSIGQUITを送信する。これはEmacs外部では“quit character”(通常はC-bC-\)により送信されるシグナルである。

Function: stop-process &optional process current-group

この関数は、シグナルSIGTSTPを送信することにより、プロセスprocessを停止する。実行の再開には、continue-processを使用する。

ジョブ制御をもつシステム上のEmacs外部では、“stop character”(通常はC-z)がこのシグナルを送信する。current-groupが非nilなら、この関数をサブプロセスとの対話にEmacsが使用する端末上で“C-zがタイプされた”と考えることができる。

Function: continue-process &optional process current-group

この関数は、シグナルSIGCONTを送信することにより、プロセスprocessの実行を再開する。これはprocessが以前に停止されたものと推定する。

Command: signal-process process signal

この関数はプロセスprocessにシグナルを送信する。引数signalはどのシグナルを送信するかを指定する。これは整数、または名前がシグナルであるようなシンボルであること。

process引数にはシステムプロセスID (整数)を指定できる。これによりEmacsの子プロセス以外のプロセスにシグナルを送信できる。System Processesを参照のこと。