linux killコマンドの詳細


1.コマンドフォーマット
kill[パラメータ][プロセス番号]
2.コマンド機能:
指定した信号を対応するプロセスに送信します.モデルを指定しないとSIGTERM(15)が送信され、指定プロセスが終了します.プログラムを終了できない場合に「-KILL」パラメータを使用して、SIGKILL(9)の信号を送信すると、プロセスが強制的に終了し、psコマンドまたはjobsコマンドを使用してプロセス番号を表示できます.rootユーザーはユーザーのプロセスに影響し、root以外のユーザーは自分のプロセスにしか影響しません.
3.コマンドパラメータ:
-l信号です.信号の番号付けパラメータを付けない場合は、「-l」パラメータを使用してすべての信号名がリストされます.
-a現在のプロセスを処理する場合、コマンド名とプロセス番号の対応関係は制限されません.
-p killコマンドは、関連するプロセスのプロセス番号のみを印刷し、信号を送信しないことを指定します.
-s指定送信信号
-uユーザーの指定
注意:
1、killコマンドは信号番号オプションを持ってもいいし、持っていなくてもいいです.信号番号がない場合、killコマンドは、プロセスによってキャプチャされ、プロセスが終了する前にリソースをクリーンアップして解放できる終了信号(15)を発行する.killでプロセスに特定の信号を送信することもできます.例:
kill -2 123

フロントでPID 123のプロセスを実行するときにCtrl+Cキーを押すのと同じ効果です.ただし、一般ユーザはsignalパラメータを持たないkillコマンドまたは-9信号のみを使用することができる.
2、killはプロセスID番号をパラメータとして持つことができる.これらのプロセスにkillで信号を送信する場合は、これらのプロセスの所有者である必要があります.権限のないプロセスを取り消すか、存在しないプロセスを取り消そうとすると、エラーメッセージが表示されます.
3.複数のプロセスに信号を送信したり、終了したりすることができる.
4、killが正常に信号を送信すると、shellはプロセスの終了情報を画面に表示します.この情報はすぐに表示されない場合があり、Enterキーを押してshellのコマンドプロンプトが再び表示される場合にのみ表示されます.
5、信号はプロセスを強制的に終了させ、データが失われたり、端末が正常な状態に戻らないなどの副作用をもたらすことが多いことに注意してください.プロセスが最初にそれをキャプチャできないため、kill信号(9)を使用するのはやむを得ない場合に限られるので、信号を送信するときは注意しなければならない.すべてのバックグラウンドジョブを取り消すにはkill 0を入力します.バックグラウンドで実行されるコマンドの中には、複数のプロセスが起動するものもあるので、殺すべきプロセスのPIDをすべて追跡して見つけるのは面倒です.この場合、kill 0を使用して現在のshellによって開始されたすべてのプロセスを終了することは、有効な方法です.
4.使用例:
例1:すべての信号名をリストする
コマンド:
kill -l

出力:
[root@localhost test6]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
説明:
第9の信号(SIGKILL)のみが無条件にプロセスを終了することができ、他の信号プロセスは無視する権利がある.次に、一般的な信号を示します.
HUP 1終端断線
INT 2割り込み(Ctrl+Cと同じ)
QUIT 3脱退(Ctrl+)
TERM 15終端
KILL 9強制終了
CONT 18続行(STOPとは逆にfg/bgコマンド)
STOP 19一時停止(Ctrl+Zと同じ)
例2:指定信号の数値を得る
コマンド:
出力:
[root@localhost test6]# kill -l KILL

[root@localhost test6]# kill -l SIGKILL

[root@localhost test6]# kill -l TERM

[root@localhost test6]# kill -l SIGTERM

説明:
例3:psでプロセスを検索しkillで殺す
コマンド:
kill 3268

出力:
[root@localhost test6]# ps -ef|grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@localhost test6]# kill 3268
[root@localhost test6]# kill 3268
-bash:kill:(3268)-そのプロセスはありません
[root@localhost test6]#
説明:
例4:プロセスを徹底的に殺す
コマンド:
kill –9 3268 

出力:
[root@localhost test6]# ps -ef|grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
[root@localhost test6]# kill –9 3268
[root@localhost test6]# kill 3268
-bash:kill:(3268)-そのプロセスはありません
[root@localhost test6]#
説明:
例5:指定されたユーザのすべてのプロセスを殺す
コマンド:
kill -9 $(ps -ef | grep peidalinux)

kill -u peidalinux

出力:
[root@localhost ~]# kill -9 $(ps -ef | grep peidalinux)
[root@localhost ~]# kill -u peidalinux
説明:
方法1、hnlinuxユーザープロセスをフィルタリングして殺す
例6:initプロセスは殺すことができない
コマンド:
kill -9 1

出力:
[root@localhost ~]# ps -ef|grep init

root         1     0  0 Nov02 ?        00:00:00 init [3]                  

root     17563 17534  0 17:37 pts/1    00:00:00 grep init

[root@localhost ~]# kill -9 1

[root@localhost ~]# kill -HUP 1

[root@localhost ~]# ps -ef|grep init

root         1     0  0 Nov02 ?        00:00:00 init [3]                  

root     17565 17534  0 17:38 pts/1    00:00:00 grep init

[root@localhost ~]# kill -KILL 1

[root@localhost ~]# ps -ef|grep init

root         1     0  0 Nov02 ?        00:00:00 init [3]                  

root     17567 17534  0 17:38 pts/1    00:00:00 grep init