Next: Output from Processes, Previous: Input to Processes, Up: Processes
サブプロセスにシグナルを送ることは、
サブプロセスの動作に割り込む一方法です。
それぞれ独自の意味を持つ異なるシグナルがいくつかあります。
一連のシグナルとそれらの名前は、オペレーティングシステムが定義します。
たとえば、シグナルSIGINT
は、ユーザーがC-cを打った、
あるいは、それと同様なことが起こったことを意味します。
各シグナルには、サブプロセスに対する標準的な効果があります。 ほとんどのシグナルはサブプロセスをキルしますが、 その実行を一時停止したり再開するものもあります。 プログラムがシグナルを処理している場合には、 シグナルの効果を一般的に述べることはできません。
本節の関数を呼び出してシグナルを明示的に送ることができます。
また、Emacsは特定の場面で自動的にシグナルを送ります。
バッファを削除すると、そのバッファに対応付けられているすべての
プロセスにシグナルSIGHUP
を送ります。
Emacsを終了するときには、動作しているすべてのサブプロセスに
シグナルSIGHUP
を送ります。
(SIGHUP
は、ユーザーが電話を切ったことを普通は表すシグナル。)
シグナルを送る各関数は、省略可能な2つの引数、 process-nameとcurrent-groupを受け付けます。
引数process-nameは、プロセス、プロセス名、nil
のいずれかです。
これがnil
であると、カレントバッファに対応付けられているプロセスが
デフォルトになります。
process-nameがプロセスを指定しないとエラーを通知します。
引数current-groupは、Emacsのサブプロセスとして
ジョブ制御可能なシェルを実行しているときに違いが現れるフラグです。
これがnil
以外であると、
Emacsがサブプロセスとの通信に用いている端末の現在のプロセスグループに
シグナルを送ります。
プロセスがジョブ制御可能なシェルであると、
これはシェルの現在のサブジョブ
1
であることを意味します。
nil
であると、Emacsのサブプロセスの直接のプロセスグループに
シグナルを送ります。
プロセスがジョブ制御可能なシェルであると、これはシェルそのものです。
オペレーティングシステムはパイプではプロセスグループを扱わないため、
サブプロセスとの通信にパイプを用いている場合には、
フラグcurrent-groupには効果はありません。
同じ理由で、パイプを用いている場合には
ジョブ制御可能なシェル(のジョブ制御機能)は働きません。
Asynchronous Processesの
process-connection-type
を参照してください。
この関数は、プロセスprocess-nameに シグナル
SIGINT
を送って割り込む。 Emacsの外側では、『割り込み文字』(普通、C-cであるシステムもあり、 その他のシステムではDEL
)を打つとこのシグナルを送る。 引数current-groupがnil
以外であると、 この関数は、Emacsがサブプロセスと通信している端末上で 『C-cを打つ』と考えることができる。
この関数は、プロセスprocess-nameに シグナル
SIGKILL
を送ってキルする。 このシグナルはサブプロセスを即座にキルし、 サブプロセスはこれを処理できない。
この関数は、プロセスprocess-nameにシグナル
SIGQUIT
を送る。 このシグナルは、『中断文字』 (Emacsの外側では普通はC-bやC-\)が 送るシグナルと同じものである。
この関数は、プロセスprocess-nameに シグナル
SIGTSTP
を送って一時停止させる。 その実行を再開させるにはcontinue-process
を使う。Emacsの外側でジョブ制御可能なシステムでは、 『一時停止文字』(普通はC-z)が普通はこのシグナルを送る。 current-groupが
nil
以外であると、 この関数は、Emacsがサブプロセスと通信している端末上で 『C-zを打つ』と考えることができる。
この関数は、プロセスprocessに シグナル
SIGTCONT
を送って実行を再開させる。 以前に一時停止させられたprocessを再開する。