暴走したプログラムを強制終了させる




Linuxを使用していてプログラムが暴走することがあります。そんなときは killコマンドで終了シグナルを送ってやります。
私がよく体験するのはNetscapeが突然異常終了して新しくNetscapeを
立ち上げると画面上には立ち上がっていないのにプロセスが残っておりうまく動かない時があります。
そんなときはまず ps コマンドでプロセスIDを見付けだし、次にkillコマンドでそのプロセスを終らしてやります。
ps コマンドのパラメーターは以下のようにすればよいでしょう。
ps aux

こうすると全てのプロセスの一覧をみることができます。
そこで強制終了したいプロセス番号を見付けます。
プロセス番号は表示されたプロセス一覧の中の PIDの列をみます。

強制終了させたいプロセスIDがわかったら以下のようにして終了させます。
kill -TERM プロセス番号

これでもういちど ps aux とやりプロセスの一覧をみてみます。
もしもこれでも終了していないようであれば以下のようにします。
kill -KILL プロセス番号

使用できるシグナルは kill -l で確認することができます。
man 7 signal で細かい情報を得ることができます。


もしも暴走してしまってキーボードもマウスも効かなくなってしまったら
他の端末からtelnetやrloginで暴走した端末にログインし、そこから上記の手順で
暴走プロセスをkillすれば Windows みたいに「困った時には再起動!」なんてキャッチフレーズはなくなりますよね。(^-^)

アプリが暴走してもOS自身が不安定になることはLinuxの場合あまりありません。
telnetやrloginでリモートからログインしなくても仮想端末を切替えてログインし
そこで暴走プログラムを終了させることも可能です。
仮想端末の切替えはこちらを参考にしてください。


killの順番は次の順番が良いようです。
kill -TERMkill -HUPkill -KILL

また、デーモンの場合はHUPシグナルを受け取ると設定ファイルを読み直すことが多いです。
ですので設定ファイルを変更して即有効にしたい場合はHUPシグナルをおくってやります。
例えばinetdなら
kill -HUP プロセス番号
です。

又、killallというコマンドがあり、このコマンドを使えばプロセスIDでなく
コマンド名でプロセスを指定します。
inetdの場合なら
killall -HUP inetd
です。

しかしsambaやapacheみたいにrestartオプションのあるものはそちらを使用するほうが良いようです。










       [へなちょこlinuxのコーナーへ]    [ホームへ]