- ベストアンサー
- 困ってます
killコマンドの終了と強制終了の違いについて
私は、SUNのSolaris8を使っています。 現在動いているプロセスを、killコマンドを使って終了させる際に、 -9または-KILLオプションを付けると、強制終了を行いますよね。 そこで質問なのですが、そもそもプロセスの『終了』と『強制終了』の違いとは何ですか? とっても初歩的な質問だとは思いますが、いまいち理解できません。 よろしくお願いします。
- tomo_t_21
- お礼率88% (270/306)
- 回答数6
- 閲覧数2742
- ありがとう数3
質問者が選んだベストアンサー
- ベストアンサー
- 回答No.3
- a-kuma
- ベストアンサー率50% (1122/2211)
いわゆる unix には、「シグナル」というイベント通知の仕組みがあります。 あるプロセスに対して、シグナルが送信されると、そのプロセスは、やっている 処理を中断して、シグナルハンドラという特別に割り当てられた処理を行います。 kill コマンドというのは、このシグナルの送信をするコマンドに他なりません。 シグナルは、番号でイベントを区別でき、何種類もあり、それぞれの番号毎に 意味が割り当てられています。 シグナルハンドラは、自分で作って登録することもできますが、その登録を行わない ときには、それぞれのシグナルに「デフォルトの動作」が割り当てられています。 デフォルトの動作は、無視・コア・終了・停止の4種類あります。 シグナルの中で9(SIGKILL)だけは、ちょっと特別で、シグナルハンドラの登録が 無視されます。なので、このシグナルを送信することで、対象のプロセスを無条件に 終了させることが保証されています。 これを簡単に言うと「強制終了」ですね。 他にも、デフォルトの動作が「終了」シグナルがあります(例えば、1や2)。 こいつらも送信すると対象のプロセスは終了するのですが、シグナルハンドラを 登録することができるので、そのプロセスの作り方によっては終了しないことが ありえます。 > そもそもプロセスの『終了』と『強制終了』の違いとは何ですか? 普通にプロセスが終了する場合、というのは exit システムコールを呼んだのと 同じなんですが、シグナルのデフォルトの動作での「終了」も exit システムコール を呼ぶのと同じです。 なので、実は違いがありません。 kill -KILL は、「『終了』を無条件に例外無く行う」と考えて下さい。
関連するQ&A
- killコマンドについてお教えください。
solaris初心者です。 killコマンドで、 kill -TERM pidで終了できないプロセスについては kill -KILL pidで強制的に終了することができます。 と他の者に説明したら、どうして終了できないのが あるのですかと聞かれました。的確に回答できませんでしたので、よい説明方法等ありましたらお教えください。 あとkill -INT pidについてもお教えください。
- ベストアンサー
- Solaris系OS
- 強制終了できないプロセスの強制終了
異常終了するアプリケーションのプロセスが残ってしまい、 タスクマネージャでの強制終了も受け付けません。 これを強制終了させるにはどうすればよいでしょうか。
- ベストアンサー
- Windows XP
- DOSコマンドでの強制終了
batファイルにて複数コマンドを実施していますが、 実行中に 右上のxボタン(画面閉じる)にて強制終了できない、またはxボタンにて閉じる場合は応答要求をくるようにし強制終了を簡単に使用できないようにしたいのですが、いい方法があれば教えて下さい。
- 締切済み
- その他(インターネット・Webサービス)
その他の回答 (5)
- 回答No.6
- a-kuma
- ベストアンサー率50% (1122/2211)
cherry_moon> #3 の補足になりますが、どんなシグナルがあるかは、 cherry_moon> signal.h、sys/signal.h を見れば分かります。 では、補足返しを :-) あれでは、OS によっては、すんごく重たくなるので > while(1){ > ; > } は、 pause(); としておいた方が良い、ということ。 もうひとつは、そのプログラムを動かしても SIGKILL だけは、my_handler() を 通らないことが、確認できますね、ということを付け加えておきます。
- 回答No.5

kill、kill -TERM、kill -15 といったコマンドは、 終了を表す「SIGTERM」というシグナルをプロセスに送ります。 プロセスがこのシグナルを受け取ると、ただ終了するのではなく、 プログラム内で指定された終了時の処理を行います。 (trapコマンドでこの処理は指定できます) たとえば、一時ファイルを削除したり、処理した項目をログに書き込むと行った処理が考えられます。 このシグナルを無視するようにも指定できます。 もしこれでプロセスを終了させられない場合、 kill -kill、kill -9 などのコマンドを利用することになります。 これらは、強制終了を表す「SIGKILL」というシグナルをプロセスに送ります。 この場合、naturalさんの書かれているように、プロセス自身の処理ではなく、 外部から強制的に終了させられるので、 終了時の処理などをプログラム内で指定できないのです。 (つまり、予想外の結果を招きかねません。) ちなみに、シグナルにはかなり種類があります。 bashなどでは、kill -l で確認できます。
- 回答No.4
- cherry_moon
- ベストアンサー率36% (37/102)
#3 の補足になりますが、どんなシグナルがあるかは、 signal.h、sys/signal.h を見れば分かります。 下のプログラムを実行すると、どんなシグナルが入力されてるか見れます。 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> void my_handler(int sig); int main(int argc, char **argv) { int sig; for(sig=0;sig<256;sig++){ signal(sig, &my_handler); } while(1){ ; } return 0; } void my_handler(int sig) { printf("signal: %d\n", sig); return; }
- 回答No.2
- pythian
- ベストアンサー率32% (26/80)
終了とはプロセスに「終わってください」と言って、それに応答してプロセスが終わるものです。だから、プログラムが暴走したりして話を聞いてないときは無駄でしょう。Windowsで暴走したプログラムの×を押しても何も起こらないのと同じです。強制終了の場合、シグナルという信号を投げます。シグナルには数種類あるのですが、この場合プログラムに割り込んで処理を中断、終了させます。 Windowsの「・・・は応答していません。終了しますか?」のような画面に例えるとわかりやすいですね。ソフトウェアの動きに割り込んで強制終了させます。
- 回答No.1
- natural
- ベストアンサー率37% (419/1115)
プロセスの『終了』はプロセス自身の処理によって終了しますが、『強制終了』は外部からのシグナルによって強制終了命令を受け取ることによって終了させられるものです。 killコマンドには-9以外にもシグナルナンバーがあり、それぞれ送るシグナルによってプロセス側の反応も異なってきます。 killとはその名の通りプロセスを殺すことが代表的な役目ですが、実は様々なシグナルをプロセスに対して発行する役目を持っています。
関連するQ&A
- telnetの強制終了について!
telnetについて質問させてください。 現在,大学のサーバーにあるアプリケーションを自分のパソコンから起動させて数値解析を実行しています。 telnetでアプリケーションの強制終了は,コマンドpsでkill PIDで出来ます。しかし,telnetをログアウトし,再びログインしてコマンドpsを入力すると何も出てきません。しかしながら,FTPのファイル容量は増加しており解析は進んでいます。 telnetは常にログインしておかなければ駄目なんでしょうか?? もしくは何か良いコマンドはあるのでしょうか?? 解析モデルが間違っており至急強制終了したいのです。 宜しくお願いします。
- 締切済み
- その他(プログラミング・開発)
- 強制終了の仕方を教えてください。
こんばんは、強制終了の仕方を教えてください。 アプリケーションの強制終了の仕方はわかるのですが、 (Control+Alt+Command) パソコン自体の強制終了の仕方がわかりません。 というかあるのでしょうか?? それすら分からないので質問させてください。。 ヘルプで「強制終了」と検索してみたのですが、 載っていませんでした。 Windowsのような感じで強制終了できるやり方がありましたら 教えてください。 使用環境は、OSX Panther PowerBook G4 17/1,5です。 よろしくお願いいたします。
- ベストアンサー
- Mac
- 強制終了のやり方
かなり初歩的な質問なんですが強制終了のやり方ってどうでしたっけ? しばらく使っていなかったので忘れてしまいました・・・m(__)mちなみにWIN98です
- ベストアンサー
- その他(インターネット・Webサービス)
- 虹色ぐるぐる、強制終了不可
少し前から Macminiが 虹色ぐるぐる、強制終了不可 という状態によくなります。しかし使用するたび毎回ではなく、毎日半日ほど使って週に2回ぐらいの感じです。 例えば、ブラウザを使用していて虹色ぐるぐるがになり、他のアプリケーションに切り替えて、そのアプリで何らかの動作をさせようとすると(例えばフォルダを開いたり、ソフトを終了させたりなど)するとそのソフトでも虹色ぐるぐるになってしまいます。 また、コマンド+オプション+Escで強制終了をしても無反応で強制終了ウインドウが表示されないか、しばらく経って表示され表示された配意が強制終了が行えないという状態になってしまいます。 とりあえず、やった事はディスクユーティリティでディスクのアクセス権の検証と実効です。 このような状態なのですが、似たような状態になられた方、問題の解決方法をご存じの方、などアドバイスをください。 よろしくお願いします。
- 締切済み
- Mac
- あれ、強制終了はどうしちゃった…?
DELL製のWindowsXP HOMEEDITIONを使ってるそこらの高校生です PCは富士通のWin95から使っていたのですが、このPCに乗り換えて色々と気づきました 仕様が変わっただけなのかもしれませんが… [Ctrl]+[Alt]+[Delete]で出るプログラムの強制終了は出ないのですか…?このPCでそのコマンドを入力すると[ローカルエリア接続]とかいう謎のグラフのようなものが淡々と進んでいくのですが… 技術不足なだけだと思いますが、もし今なおプログラムの強制終了が存在するなら開き方を教えてください、もしくは設定とか…? 今まで数々のPCをいじっては自分どおりにカスタマイズした挙句ぶっ壊してきたので触るのは慣れてるんですが…どうしても質問したかったので…お願いします
- ベストアンサー
- Windows XP
- 強制終了できません。
macでイラストレーターを使用していたところ、 フリーズして動かなくなりました。 メモリースティックにはいった素材を上書きしていたら、 「リムーバブルディスクの装置は突然電源が切られました」と いうようなメッセージがでて、フリーズしてしまい、 メモリスティックも抜いて、 コマンド+option+escで強制終了しようとしてもできず、 やむなく強制終了で電源ボタンを長押ししてみたのですが、 電源は落ちず、スリープ状態(?)のようなことになって、 再度電源をつけても、フリーズしたままの状態の画面しかでてきません。 何度繰り返しても同じ現象です。。。(;;) どうしたらいいのでしょうか?
- ベストアンサー
- Mac
- XPで、プロセスをKILLするDOSからのコマンドは。
WindowsXPです。 Ctr+Alt+Del で、タスクマネージャを起動してプロセスのところを見ると、いらないプロセスがあるので、これを終了させる際、今は、このタスクマネージャでプロセスを選択して、プロセス終了をしています。 これをMSDOSのプロンプトから、コマンドで実行できませんか。 たとえば、 Kill "イメージ名" などのように。 (これは適当に書いたので、このコマンドは間違っていますが) KILLしたいプロセスが複数あるので、バッチファイルにしてまとめてKILLしたいのです。 よろしくお願いします。
- ベストアンサー
- Windows XP
質問者からのお礼
ご回答ありがとうございました。