読者です 読者をやめる 読者になる 読者になる

ソフトウェアエンジニア現役続行

雑多なことを綴ります

シャットダウンプロセスの仕組み

Linux

Linuxの起動プロセスの仕組みに関する記述はよく見ることが出来ますが、シャットダウンプロセスの仕組みに関する記述はあまりないので、ここに記しておきます。


poweroffコマンドが呼ばれると、Linuのランレベルが0になります。rebootコマンドの場合はランレベルは6になります。


すると、initプロセスに制御が戻ります。initプロセスは、/etc/inittabを見ます。


/etc/inittabには次のように書かれています。


id:3:initdefault: # 起動時のランレベルは3。この場合は無視されます


si::sysinit:/etc/rc.d/rc.sysinit # ランレベルに関わらず、起動時にはrc.sysinitが実行される。この場合は無視されます。


# ランレベルに応じて、「/etc/rc.d/rc *」が実行される。この場合は、0または6です。
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1



なので、シャットダウン時は「/etc/rc.d/rc 0」が呼ばれ、
/etc/rc0.d/K* で登録された起動スクリプトが呼ばれ、
/etc/rc0.d/S00killall で、/var/lock/subsysに残っているプロセスにstopを送り、
/etc/rc0.d/S01halt で、全プロセスにTERMを送り、5秒sleepして全プロセスにKILLを送ります。


/etc/inittabの文法については、@ITのこの記事に分かりやすく書かれています。