覚えておくと便利なシグナル
戸田です。
シグナルとはプロセス間通信の一種で、プロセスに対してさまざまなイベントを通知するときに使います。
これを上手に使うと、重い処理を行っているプロセスを一時停止させることができます。
まずはおさらい。
プロセスに対してシグナルを送信する場合には"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)を送ってサスペンドから再開させるのを忘れずに。
ディスカッション
コメント一覧
まだ、コメントがありません