隠しプロセスでも、そのプロセス id (pid) がわかれば kill できます。多くのシステムでは、起動時に開始された全プロセスの pid を、/var (普通 /var/run が使われます) の下のどこかに保存します。シャットダウンスクリプトを修正して、これらのファイルから pid を読み、適切なシグナルを送るようにできます。
例えば、システムが pid を /var/run/<プロセス名>.pid に保存しているなら、以下の行をシャットダウンスクリプトに追加することができます −
for p in `ls /var/run/*.pid` do kill -15 `cat $p` done sleep 5 sync;sync;sync for p in `ls /var/run/*.pid` do kill -9 `cat $p` done sleep 5 sync;sync;sync |
別解としては、全てのプロセスに、TERM と KILL のシグナルを単に送るというのもあります。
MAX_PROC=65535 trap : 1 2 15 I=1;while (( $I < $MAX_PROC ));do I=$(($I+1)); if (( $$ != $I ));then kill -15 $I; fi; done sleep 5 sync;sync;sync; I=1; while (( $I < $MAX_PROC ));do I=$(($I+1)); if (( $$ != $I ));then kill -9 $I; fi; done sync;sync;sync |
Nenad Micic はシャットダウン時に隠れプロセスを kill する独自の C プログラム を書きました。