覚えておくと便利なシグナル

todakill,linux,tips,コマンド,シグナル

戸田です。

シグナルとはプロセス間通信の一種で、プロセスに対してさまざまなイベントを通知するときに使います。

これを上手に使うと、重い処理を行っているプロセスを一時停止させることができます。

まずはおさらい。
プロセスに対してシグナルを送信する場合には"kill"コマンドを使います。
$ kill -<シグナル名 または ID> <pid>
シグナル名は"SIG"からはじまるシンボル名がつけられていますので、それを指定します。
また、"SIG"は省略可能です。

つまり、SIGINT(シグナルID: 2)であれば、以下はすべて同じです。
$ kill -SIGHUP <pid>
$ kill -HUP <pid>
$ kill -2 <pid>

シグナル名を省略すると、SIGTERM (シグナルID: 15)を指定したことになります。

さて、ここからが本題。

SIGSTOP(シグナルID: 19)は、プロセスに処理を一時中断して、サスペンドに入ることを指示します。
ちなみにシェルからプロセスをフォアグラウンドで動作中にctrl + Zでサスペンドさせることができますが、
裏ではシェルがSIGSTOPと同等のSIGTSTP(シグナルID: 20)シグナルを送信することでサスペンドを実現しています。

重い処理を行っているプロセスがあるマシンで、別の処理をすぐに開始させたい場合は、
一度その重いプロセスにSIGSTOPを送って、処理を中断させましょう。

$ kill -STOP <pid>

サスペンドになったプロセスの状態を ps で確認すると、STATに"T"と表示されます。
ただし、一般ユーザから送信した場合は、受信が拒否されることがあるので、rootになる必要があるかもしれません。

自分の処理が終わったら、SIGCONT(シグナルID: 18)を送ってサスペンドから再開させるのを忘れずに。

todakill,linux,tips,コマンド,シグナル

Posted by toda