コース目次 / 第3章

シグナル — プロセスへの割り込み

kill -STOP/-CONTでプロセスを一時停止・再開させ、psのSTAT列がS→T→Sと変化することを確認します。シグナルがプロセスへの外部からの割り込みだと理解します。

第3章 / 全5章目安 約8分この章のゴール: シグナルでプロセスの状態を外部から変えられることを理解する

killという名前ですが、プロセスを終了させるだけの道具ではありません。シグナルという、プロセスへの割り込み信号を送る道具です。

一時停止させる

./sleepy &
PID: 15072
ps -p 15072 -o pid,stat,cmd
  PID STAT CMD
15072 S    ./sleepy
kill -STOP 15072
ps -p 15072 -o pid,stat,cmd
  PID STAT CMD
15072 T    ./sleepy

STATがS(スリープ中)からT(停止中、Traced or stopped)に変わりました。SIGSTOPは、プロセスに気づかれず(コード側で捕まえたり無視したりできず)、強制的に一時停止させるシグナルです。

再開させる

kill -CONT 15072
ps -p 15072 -o pid,stat,cmd
  PID STAT CMD
15072 S    ./sleepy

SIGCONTで、またS(スリープ中、実質的には実行可能)に戻りました。プロセスは、一時停止していた場所から、何事もなかったかのように再開します。

kill 15072

プレーンなkill(引数無し)は、デフォルトでSIGTERM——「終了してください」というお願いのシグナルです。プロセス側がこれを無視するコードを書いていれば、終了しないこともあります(kill -KILLすなわちSIGKILLだけは、OSレベルで強制終了させる、無視できないシグナルです)。

持ち帰る一言

シグナルは、プロセスへの外部からの割り込み。 SIGSTOP/SIGCONTで一時停止・再開、SIGTERMでお願いベースの終了要求、SIGKILLで強制終了——同じ「プロセスを止める」でも、意味も強さも違います。次でこのコースをまとめます。

こうなっていればOK

卒業まであと1章です。

この章はまだ完了していません。