次: , 前: Input to Processes, 上: Processes


36.8 プロセスにシグナルを送る

サブプロセスにシグナルを送ることは、 サブプロセスの動作に割り込む一方法です。 それぞれ独自の意味を持つ異なるシグナルがいくつかあります。 一連のシグナルとそれらの名前は、オペレーティングシステムが定義します。 たとえば、シグナルSIGINTは、ユーザーがC-cを打った、 あるいは、それと同様なことが起こったことを意味します。

各シグナルには、サブプロセスに対する標準的な効果があります。 ほとんどのシグナルはサブプロセスをキルしますが、 その実行を一時停止したり再開するものもあります。 プログラムがシグナルを処理している場合には、 シグナルの効果を一般的に述べることはできません。

本節の関数を呼び出してシグナルを明示的に送ることができます。 また、Emacsは特定の場面で自動的にシグナルを送ります。 バッファを削除すると、そのバッファに対応付けられているすべての プロセスにシグナルSIGHUPを送ります。 Emacsを終了するときには、動作しているすべてのサブプロセスに シグナルSIGHUPを送ります。 (SIGHUPは、ユーザーが電話を切ったことを普通は表すシグナル。)

シグナルを送る各関数は、省略可能な2つの引数、 process-namecurrent-groupを受け付けます。

引数process-nameは、プロセス、プロセス名、nilのいずれかです。 これがnilであると、カレントバッファに対応付けられているプロセスが デフォルトになります。 process-nameがプロセスを指定しないとエラーを通知します。

引数current-groupは、Emacsのサブプロセスとして ジョブ制御可能なシェルを実行しているときに違いが現れるフラグです。 これがnil以外であると、 Emacsがサブプロセスとの通信に用いている端末の現在のプロセスグループに シグナルを送ります。 プロセスがジョブ制御可能なシェルであると、 これはシェルの現在のサブジョブ 1 であることを意味します。 nilであると、Emacsのサブプロセスの直接のプロセスグループに シグナルを送ります。 プロセスがジョブ制御可能なシェルであると、これはシェルそのものです。

オペレーティングシステムはパイプではプロセスグループを扱わないため、 サブプロセスとの通信にパイプを用いている場合には、 フラグcurrent-groupには効果はありません。 同じ理由で、パイプを用いている場合には ジョブ制御可能なシェル(のジョブ制御機能)は働きません。 Asynchronous Processesprocess-connection-typeを参照してください。

— 機能: interrupt-process &optional process-name current-group

この関数は、プロセスprocess-nameに シグナルSIGINTを送って割り込む。 Emacsの外側では、『割り込み文字』(普通、C-cであるシステムもあり、 その他のシステムではDEL)を打つとこのシグナルを送る。 引数current-groupnil以外であると、 この関数は、Emacsがサブプロセスと通信している端末上で 『C-cを打つ』と考えることができる。

— 機能: kill-process &optional process-name current-group

この関数は、プロセスprocess-nameに シグナルSIGKILLを送ってキルする。 このシグナルはサブプロセスを即座にキルし、 サブプロセスはこれを処理できない。

— 機能: quit-process &optional process-name current-group

この関数は、プロセスprocess-nameにシグナルSIGQUITを送る。 このシグナルは、『中断文字』 (Emacsの外側では普通はC-bC-\)が 送るシグナルと同じものである。

— 機能: stop-process &optional process-name current-group

この関数は、プロセスprocess-nameに シグナルSIGTSTPを送って一時停止させる。 その実行を再開させるにはcontinue-processを使う。

Emacsの外側でジョブ制御可能なシステムでは、 『一時停止文字』(普通はC-z)が普通はこのシグナルを送る。 current-groupnil以外であると、 この関数は、Emacsがサブプロセスと通信している端末上で 『C-zを打つ』と考えることができる。

— 機能: continue-process &optional process-name current-group

この関数は、プロセスprocessに シグナルSIGTCONTを送って実行を再開させる。 以前に一時停止させられたprocessを再開する。

— 機能: signal-process pid signal

この関数は、必ずしもEmacsの子プロセスではない プロセスpidにシグナルを送る。 引数signalは、送るべきシグナルを整数で指定する。


脚注

[1] 【訳注】シェルのもとで動いているプロセス群