• ベストアンサー

killコマンドの終了と強制終了の違いについて

a-kumaの回答

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

いわゆる unix には、「シグナル」というイベント通知の仕組みがあります。 あるプロセスに対して、シグナルが送信されると、そのプロセスは、やっている 処理を中断して、シグナルハンドラという特別に割り当てられた処理を行います。 kill コマンドというのは、このシグナルの送信をするコマンドに他なりません。 シグナルは、番号でイベントを区別でき、何種類もあり、それぞれの番号毎に 意味が割り当てられています。 シグナルハンドラは、自分で作って登録することもできますが、その登録を行わない ときには、それぞれのシグナルに「デフォルトの動作」が割り当てられています。 デフォルトの動作は、無視・コア・終了・停止の4種類あります。 シグナルの中で9(SIGKILL)だけは、ちょっと特別で、シグナルハンドラの登録が 無視されます。なので、このシグナルを送信することで、対象のプロセスを無条件に 終了させることが保証されています。 これを簡単に言うと「強制終了」ですね。 他にも、デフォルトの動作が「終了」シグナルがあります(例えば、1や2)。 こいつらも送信すると対象のプロセスは終了するのですが、シグナルハンドラを 登録することができるので、そのプロセスの作り方によっては終了しないことが ありえます。 > そもそもプロセスの『終了』と『強制終了』の違いとは何ですか? 普通にプロセスが終了する場合、というのは exit システムコールを呼んだのと 同じなんですが、シグナルのデフォルトの動作での「終了」も exit システムコール を呼ぶのと同じです。 なので、実は違いがありません。 kill -KILL は、「『終了』を無条件に例外無く行う」と考えて下さい。

tomo_t_21
質問者

お礼

ご回答ありがとうございました。

関連するQ&A

  • killコマンドについてお教えください。

    solaris初心者です。 killコマンドで、 kill -TERM pidで終了できないプロセスについては kill -KILL pidで強制的に終了することができます。 と他の者に説明したら、どうして終了できないのが あるのですかと聞かれました。的確に回答できませんでしたので、よい説明方法等ありましたらお教えください。 あとkill -INT pidについてもお教えください。

  • XPで、プロセスをKILLするDOSからのコマンドは。

    WindowsXPです。 Ctr+Alt+Del で、タスクマネージャを起動してプロセスのところを見ると、いらないプロセスがあるので、これを終了させる際、今は、このタスクマネージャでプロセスを選択して、プロセス終了をしています。 これをMSDOSのプロンプトから、コマンドで実行できませんか。 たとえば、 Kill "イメージ名" などのように。 (これは適当に書いたので、このコマンドは間違っていますが) KILLしたいプロセスが複数あるので、バッチファイルにしてまとめてKILLしたいのです。 よろしくお願いします。

  • UNIX(Linuxでも)のkillコマンドで、終了メッセージを抑止し

    UNIX(Linuxでも)のkillコマンドで、終了メッセージを抑止したい。 例えば、シェルの中で以下のようなコマンドがある場合に、 「○○が終了しました」とメッセージが出力されてしまいます。 抑止方法があれば教えてください。 kill xxx > /dev/null 2>&1 ※xxxはプロセスID よろしくお願いします。

  • Windows8.1 プロセスを終了させるコマンド

    windows8.1で、特定プロセスを終了させるコマンドを教えてください。 タスクマネージャーを都度々開かず、 Batch Fileで終了させたいです。(以下のコマンドを使い、プロセス名やID指定しても、反映されません) Windowsで、プロセスを終了するコマンド taskkill Windowsで、プロセス一覧を見るコマンド tasklist 具体的な使用法とオプション taskkillコマンドのオプション:  /im ・・・プロセス名を指定  /pid ・・・プロセスIDを指定  /f  ・・・強制終了 IE(Internet Explorer)を終了したい場合: C:\> taskkill /im iexplore.exe /f プロセスID(1234)を終了したい場合: C:\> taskkill /pid 1234 /f 例) [D:\0\notepad.exeを終了させるコマンド]は、どの様に記述すれば反映されますか?

  • telnetの強制終了について!

    telnetについて質問させてください。 現在,大学のサーバーにあるアプリケーションを自分のパソコンから起動させて数値解析を実行しています。 telnetでアプリケーションの強制終了は,コマンドpsでkill PIDで出来ます。しかし,telnetをログアウトし,再びログインしてコマンドpsを入力すると何も出てきません。しかしながら,FTPのファイル容量は増加しており解析は進んでいます。 telnetは常にログインしておかなければ駄目なんでしょうか?? もしくは何か良いコマンドはあるのでしょうか?? 解析モデルが間違っており至急強制終了したいのです。 宜しくお願いします。

  • PIDではなくプロセス名を指定してkillする方法

    PIDではなくプロセス名を指定してkillする方法 皆さんこんにちは。 Linuxで使うkillコマンドに関して教えてほしいことがあります。 killを使う際は、 killの後ろにPIDを指定してkillを実行していましたが、 PIDではなくプロセス名を指定して、 該当するプロセスを一度に終了させる方法はあるでしょうか。 宜しくお願い致します。 OS:Fedora9

  • [Unix初心者]「ps|grep netscape|cut -f1|kill」がうまくいかない原因は?

    当方、大学の授業でSolarisを使うことになり その課題の1つとして以下のものが出されています 現在起動しているnetscapeを終了するにはどうしたらよいか、 手順を述べよ この問題自体は簡単で、 psコマンドでnetscapeのプロセスIDを調べ、 その調べた番号をkillすれば良い・・・ つまり psで 1000 (何だかわかってないけど何かしら) netscape とあったら kill 1000とすればいいのはわかっているのですが (おそらくこれが解答と思われます) 簡単な応用として 「起動しているnetscapeは1つとは限らず、  かつハイブを利用すべきだ」 を行ってみようと思い psでリストを表示したら先ほどの(分からない部分)が出てきています TAがこそこそ言っていたcutコマンドの存在を知り netscapeの「プロセスIDだけのリスト」にするために ps|grep netscape|cut -f1 と打ってみたのですが どうもプロセスIDのみになっていない様子。 解決へのヒントをください。 (たしかtcshシェルとかいっていた気が)

  • initコマンドで終了しない

    Solaris9で質問があります。 Solarisを終了させるときは、initやshutdownコマンドを使用するかと思うのですが、時々、initやshutdownコマンドを入力しても、コマンドは受け付けられるものの、サーバがシャットダウンしない(#プロンプトが表示された状態のまま)時があります。再起動の場合などは、そのままrebootと入力したりして、対応するのですが、どうして、コマンドが実行されないのでしょうか?

  • 強制終了のやり方

    かなり初歩的な質問なんですが強制終了のやり方ってどうでしたっけ? しばらく使っていなかったので忘れてしまいました・・・m(__)mちなみにWIN98です

  • 指定プログラムのプロセスを監視・killするには?

    CGIが不正終了(もしくは無限ループ)して、CPUに負担をかけ続けることで悩んでいます。 topコマンドで負担をかけているプロセスを発見してkillすることは可能ですが、これを自動で実行するようなことはできないでしょうか。 cronを使って1分間に1度チェックし、3分以上同じプロセスが動いている場合にkillしたり、もしくは不具合の起こる特定のプログラム(hoge.cgi等)を監視してkillするということができるようにしたいのです。 自分で考えたのは「top -n 1」で出力して、3分間同じプロセスがCPUに負担をかけ続けている場合にkillできるようにphpなどでプログラミングすることでしたが、もっと簡単にできるような方法がありますでしょうか。