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
は、カレントバッファーに関連付けられたプロセスを意味します。processがプロセスを識別しなければ、エラーがシグナルされます。
引数current-groupは、Emacsのサブプロセスとしてジョブ制御shell(job-control
shell)を実行中の場合に、異なる処理を行うためのフラグです。これが非nil
なら、そのシグナルはEmacsがサブプロセスとの対話に使用する端末のカレントプロセスグループに送信されます。そのプロセスがジョブ制御shellなら、これはそのshellのカレントのsubジョブになります。nil
なら、そのシグナルはEmacs自身のサブプロセスのプロセスグループに送信されます。そのプロセスがジョブ制御shellなら、それは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-bかC-\)により送信されるシグナルである。
この関数は、シグナルSIGTSTP
を送信することにより、プロセスprocessを停止する。実行の再開には、continue-process
を使用する。
ジョブ制御をもつシステム上のEmacs外部では、“stop
character”(通常はC-z)がこのシグナルを送信する。current-groupが非nil
なら、この関数をサブプロセスとの対話にEmacsが使用する端末上で“C-zがタイプされた”と考えることができる。
この関数は、シグナルSIGCONT
を送信することにより、プロセスprocessの実行を再開する。これはprocessが以前に停止されたものと推定する。
この関数はプロセスprocessにシグナルを送信する。引数signalはどのシグナルを送信するかを指定する。これは整数、または名前がシグナルであるようなシンボルであること。
process引数にはシステムプロセスID (整数)を指定できる。これによりEmacsの子プロセス以外のプロセスにシグナルを送信できる。System Processesを参照のこと。