No.3ベストアンサー
- 回答日時:
いわゆる unix には、「シグナル」というイベント通知の仕組みがあります。
あるプロセスに対して、シグナルが送信されると、そのプロセスは、やっている
処理を中断して、シグナルハンドラという特別に割り当てられた処理を行います。
kill コマンドというのは、このシグナルの送信をするコマンドに他なりません。
シグナルは、番号でイベントを区別でき、何種類もあり、それぞれの番号毎に
意味が割り当てられています。
シグナルハンドラは、自分で作って登録することもできますが、その登録を行わない
ときには、それぞれのシグナルに「デフォルトの動作」が割り当てられています。
デフォルトの動作は、無視・コア・終了・停止の4種類あります。
シグナルの中で9(SIGKILL)だけは、ちょっと特別で、シグナルハンドラの登録が
無視されます。なので、このシグナルを送信することで、対象のプロセスを無条件に
終了させることが保証されています。
これを簡単に言うと「強制終了」ですね。
他にも、デフォルトの動作が「終了」シグナルがあります(例えば、1や2)。
こいつらも送信すると対象のプロセスは終了するのですが、シグナルハンドラを
登録することができるので、そのプロセスの作り方によっては終了しないことが
ありえます。
> そもそもプロセスの『終了』と『強制終了』の違いとは何ですか?
普通にプロセスが終了する場合、というのは exit システムコールを呼んだのと
同じなんですが、シグナルのデフォルトの動作での「終了」も exit システムコール
を呼ぶのと同じです。
なので、実は違いがありません。
kill -KILL は、「『終了』を無条件に例外無く行う」と考えて下さい。
No.6
- 回答日時:
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
- 回答日時:
#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
- 回答日時:
終了とはプロセスに「終わってください」と言って、それに応答してプロセスが終わるものです。
だから、プログラムが暴走したりして話を聞いてないときは無駄でしょう。Windowsで暴走したプログラムの×を押しても何も起こらないのと同じです。強制終了の場合、シグナルという信号を投げます。シグナルには数種類あるのですが、この場合プログラムに割り込んで処理を中断、終了させます。Windowsの「・・・は応答していません。終了しますか?」のような画面に例えるとわかりやすいですね。ソフトウェアの動きに割り込んで強制終了させます。
No.1
- 回答日時:
プロセスの『終了』はプロセス自身の処理によって終了しますが、『強制終了』は外部からのシグナルによって強制終了命令を受け取ることによって終了させられるものです。
killコマンドには-9以外にもシグナルナンバーがあり、それぞれ送るシグナルによってプロセス側の反応も異なってきます。
killとはその名の通りプロセスを殺すことが代表的な役目ですが、実は様々なシグナルをプロセスに対して発行する役目を持っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
流星コーリング~双つ星の願い事~:第8話「ますみの過去」※毎月第3火曜日更新
生まれてからずっと自分は運が悪いと思っている麦(むぎ)と東京出身の転校生・真珠実(ますみ)が、広島を舞台に織りなす青春物語。人工で流れ星を作る「人工流星プロジェクト」をきっかけに、それぞれ天文部を訪ね...
-
鎌倉の大根料理店に聞いた!大根の便利な保存方法とおすすめレシピ
だんだんと寒くなりはじめたこの時期、熱々の鍋やスープで体を温めたいと思う人も多いだろう。そんな時に欠かせない食材のひとつに「大根」がある。冬の定番食材として食卓にも頻繁に登場するが、大きなサイズのもの...
-
メダロット:第113話「Vol.113※期間限定公開」
天才メダロッター六葉カガミの戦いを描く「メダロット再~リローデッド~」(漫画:伯林、監修:イマジニア)、20周年を迎えた『メダロット』が新たなストリーでココに再起動!!★全話無料で読める、週刊メダロット通信...
-
マモニャン:第319話「もみじ狩り」
マモニャンは神様の庭にある大きな世界樹にそびえ立つイチジクの実から誕生したお守りの猫。あなたのそばにマモニャンがいると、神様からのご褒美で、美味しい食べ物に巡り合えますっ♪ マモニャンに関するその他情...
-
もちっと忠犬もちしば:「ごじゅうろく柴目」
ある日、お米屋さんにやってきた柴犬たち。美味しいご飯をもらい、いつのまにか住み着いてしまいました。大好きなご主人のために看板犬として「もちしば」たちが奮闘するドタバタ日常ストーリー。ひたむきで一生懸命...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
System Idle Processってなに?...
-
5
プロセスがタスクマネージャー...
-
6
プロセスの終了について教えて...
-
7
ウィンドウズ10にて、エクスプ...
-
8
httpdの子プロセスがゾンビ化す...
-
9
Windowsで同時にオープンできる...
-
10
Powershell プロセス二重起動
-
11
プロセス、サービス、デーモン...
-
12
ps コマンドのステータス。S Ss...
-
13
CPUが突然100%
-
14
強制終了できないプロセスの強...
-
15
メディアプレイヤーが終了でき...
-
16
linuxでプロセスが動いているCP...
-
17
プロンプトが返らない
-
18
sighupとsigtermの違い
-
19
CPU使用率が常に50~10...
-
20
プロセス間でのメッセージキュ...
おすすめ情報
-
- 専門家が謎を解く
- お金や恋愛など身近な悩みや疑問をプロの答えでまるっと解決!
-
- 教えて!しりもと博士
- 謎多きクリエイターしりもと先生インタビュー記事はこちら!
- 流星コーリング~双つ星の願い事~:第...
- 鎌倉の大根料理店に聞いた!大根の便利...
- メダロット:第113話「Vol.113※期間限...
ウォッチ 人気記事ランキング
-
- 鎌倉の大根料理店に聞いた!大根の便利な保存...
- だんだんと寒くなりはじめたこの時期、熱々の鍋やスープで体を温めた...
-
- 代替肉があたりまえになる時代がくる?「代替...
- 欧米のファーストフード店では、「代替肉」のハンバーガーが販売され...
-
- 病院や警察から紹介される葬儀社の葬儀費用が...
- 「教えて!goo」に葬儀費用を安く済ませるにはという質問が投稿され...
- 4 不祥事を通報した人を守るだけでなく探...
- 5 「ウインナー」と「ソーセージ」の違い
公式facebook
公式twitter