隠しプロセスでも、そのプロセス 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 プログラム を書きました。