OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.156719
  • 閲覧数2304
  • ありがとう数3
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 88% (270/306)

私は、SUNのSolaris8を使っています。

現在動いているプロセスを、killコマンドを使って終了させる際に、
-9または-KILLオプションを付けると、強制終了を行いますよね。

そこで質問なのですが、そもそもプロセスの『終了』と『強制終了』の違いとは何ですか?

とっても初歩的な質問だとは思いますが、いまいち理解できません。
よろしくお願いします。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル14

ベストアンサー率 50% (1122/2211)

いわゆる unix には、「シグナル」というイベント通知の仕組みがあります。

あるプロセスに対して、シグナルが送信されると、そのプロセスは、やっている
処理を中断して、シグナルハンドラという特別に割り当てられた処理を行います。

kill コマンドというのは、このシグナルの送信をするコマンドに他なりません。


シグナルは、番号でイベントを区別でき、何種類もあり、それぞれの番号毎に
意味が割り当てられています。

シグナルハンドラは、自分で作って登録することもできますが、その登録を行わない
ときには、それぞれのシグナルに「デフォルトの動作」が割り当てられています。

デフォルトの動作は、無視・コア・終了・停止の4種類あります。

シグナルの中で9(SIGKILL)だけは、ちょっと特別で、シグナルハンドラの登録が
無視されます。なので、このシグナルを送信することで、対象のプロセスを無条件に
終了させることが保証されています。

これを簡単に言うと「強制終了」ですね。

他にも、デフォルトの動作が「終了」シグナルがあります(例えば、1や2)。
こいつらも送信すると対象のプロセスは終了するのですが、シグナルハンドラを
登録することができるので、そのプロセスの作り方によっては終了しないことが
ありえます。


> そもそもプロセスの『終了』と『強制終了』の違いとは何ですか?

普通にプロセスが終了する場合、というのは exit システムコールを呼んだのと
同じなんですが、シグナルのデフォルトの動作での「終了」も exit システムコール
を呼ぶのと同じです。

なので、実は違いがありません。

kill -KILL は、「『終了』を無条件に例外無く行う」と考えて下さい。
お礼コメント
tomo_t_21

お礼率 88% (270/306)

ご回答ありがとうございました。
投稿日時 - 2001-10-24 18:07:28
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル13

ベストアンサー率 37% (419/1115)

プロセスの『終了』はプロセス自身の処理によって終了しますが、『強制終了』は外部からのシグナルによって強制終了命令を受け取ることによって終了させられるものです。 killコマンドには-9以外にもシグナルナンバーがあり、それぞれ送るシグナルによってプロセス側の反応も異なってきます。 killとはその名の通りプロセスを殺すことが代表的な役目ですが、実は様々なシグナルをプロセスに対して発行する役目を持っていま ...続きを読む
プロセスの『終了』はプロセス自身の処理によって終了しますが、『強制終了』は外部からのシグナルによって強制終了命令を受け取ることによって終了させられるものです。
killコマンドには-9以外にもシグナルナンバーがあり、それぞれ送るシグナルによってプロセス側の反応も異なってきます。
killとはその名の通りプロセスを殺すことが代表的な役目ですが、実は様々なシグナルをプロセスに対して発行する役目を持っています。


  • 回答No.2
レベル10

ベストアンサー率 32% (26/80)

終了とはプロセスに「終わってください」と言って、それに応答してプロセスが終わるものです。だから、プログラムが暴走したりして話を聞いてないときは無駄でしょう。Windowsで暴走したプログラムの×を押しても何も起こらないのと同じです。強制終了の場合、シグナルという信号を投げます。シグナルには数種類あるのですが、この場合プログラムに割り込んで処理を中断、終了させます。 Windowsの「・・・は応答していま ...続きを読む
終了とはプロセスに「終わってください」と言って、それに応答してプロセスが終わるものです。だから、プログラムが暴走したりして話を聞いてないときは無駄でしょう。Windowsで暴走したプログラムの×を押しても何も起こらないのと同じです。強制終了の場合、シグナルという信号を投げます。シグナルには数種類あるのですが、この場合プログラムに割り込んで処理を中断、終了させます。
Windowsの「・・・は応答していません。終了しますか?」のような画面に例えるとわかりやすいですね。ソフトウェアの動きに割り込んで強制終了させます。
  • 回答No.4
レベル9

ベストアンサー率 36% (37/102)

#3 の補足になりますが、どんなシグナルがあるかは、 signal.h、sys/signal.h を見れば分かります。 下のプログラムを実行すると、どんなシグナルが入力されてるか見れます。 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h& ...続きを読む
#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.5

kill、kill -TERM、kill -15 といったコマンドは、 終了を表す「SIGTERM」というシグナルをプロセスに送ります。 プロセスがこのシグナルを受け取ると、ただ終了するのではなく、 プログラム内で指定された終了時の処理を行います。 (trapコマンドでこの処理は指定できます) たとえば、一時ファイルを削除したり、処理した項目をログに書き込むと行った処理が考えられます。 このシ ...続きを読む
kill、kill -TERM、kill -15 といったコマンドは、
終了を表す「SIGTERM」というシグナルをプロセスに送ります。
プロセスがこのシグナルを受け取ると、ただ終了するのではなく、
プログラム内で指定された終了時の処理を行います。
(trapコマンドでこの処理は指定できます)
たとえば、一時ファイルを削除したり、処理した項目をログに書き込むと行った処理が考えられます。
このシグナルを無視するようにも指定できます。

もしこれでプロセスを終了させられない場合、
kill -kill、kill -9 などのコマンドを利用することになります。
これらは、強制終了を表す「SIGKILL」というシグナルをプロセスに送ります。
この場合、naturalさんの書かれているように、プロセス自身の処理ではなく、
外部から強制的に終了させられるので、
終了時の処理などをプログラム内で指定できないのです。
(つまり、予想外の結果を招きかねません。)

ちなみに、シグナルにはかなり種類があります。
bashなどでは、kill -l で確認できます。
  • 回答No.6
レベル14

ベストアンサー率 50% (1122/2211)

cherry_moon> #3 の補足になりますが、どんなシグナルがあるかは、 cherry_moon> signal.h、sys/signal.h を見れば分かります。 では、補足返しを :-) あれでは、OS によっては、すんごく重たくなるので > while(1){ >   ; > } は、 pause(); としておいた方 ...続きを読む
cherry_moon> #3 の補足になりますが、どんなシグナルがあるかは、
cherry_moon> signal.h、sys/signal.h を見れば分かります。

では、補足返しを :-)

あれでは、OS によっては、すんごく重たくなるので

> while(1){
>   ;
> }

は、

pause();

としておいた方が良い、ということ。

もうひとつは、そのプログラムを動かしても SIGKILL だけは、my_handler() を
通らないことが、確認できますね、ということを付け加えておきます。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ