#はじめに
killコマンドについて改めて整理したので、そのメモ
##OSバージョン
$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
#プロセス管理シグナル
killコマンドはプロセス管理シグナルを指定する。指定しない場合はデフォルトの「SIGTERM」になる。
##コマンドで一覧を確認
$ 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
・・・
##よく使うシグナル
シグナル番号 | シグナル名 | 動作 |
---|---|---|
2 | SIGINT | キーボード割り込みして、プログラムを終了する。Ctl+Cと同等 |
9 | SIGKILL | 強制終了 |
15 | SIGTERM | プログラムを適切な方法で終了する。(デフォルト) |
18 | SIGCONT | 停止したプロセスを再開する。 |
19 | SIGSTOP | プロセスを一時停止する。 |
※シグナル番号はプラットフォームによって異なることがあるが、シグナル名は変わらない。 |
#プロセスの終了
SIGKILLは終了処理をせずに強制終了させるので、最後の手段とした方がよい。
SIGTERM → SIGINT → SIGKILLの順で試す。
##プロセスIDを指定して停止する
#プロセスIDを確認
$ ps aux | grep tail
user01 6385 0.0 0.0 5488 840 pts/0 S 10:39 0:00 tail -f /dev/null
user01 6386 0.0 0.0 5488 856 pts/0 S 10:39 0:00 tail -f /dev/null
user01 6387 0.0 0.0 5488 856 pts/0 S 10:39 0:00 tail -f /dev/null
user01 6389 0.0 0.0 10280 1064 pts/0 R+ 10:39 0:00 grep --color=auto tail
#SIGTERMでkillする(シグナルを指定しないとデフォルトのSIGTERMになる)
$ kill 6385
[1] Terminated tail -f /dev/null
#SIGINTでkillする(シグナル名で指定)
$ kill -SIGINT 6386
[2]- 割り込み tail -f /dev/null
#SIGKILLでkillする(シグナル番号で指定)
$ kill -9 6387
[3]+ 強制終了 tail -f /dev/null
##プロセス名を指定して停止する
#プロセス名を確認
$ ps aux | grep tail
user01 6443 0.0 0.0 5488 760 pts/0 S 10:44 0:00 tail -f /dev/null
user01 6444 0.0 0.0 5488 832 pts/0 S 10:44 0:00 tail -f /dev/null
user01 6445 0.0 0.0 5488 856 pts/0 S 10:44 0:00 tail -f /dev/null
user01 6447 0.0 0.0 10280 1064 pts/0 S+ 10:44 0:00 grep --color=auto tail
#プロセス名を指定してkill(3つkillされる)
$ pkill tail
##バックグラウンドジョブを停止する
# バックグラウンドジョブの確認
$ jobs
[1] 実行中 tail -f /dev/null &
[2]- 実行中 tail -f /dev/null &
[3]+ 実行中 tail -f /dev/null &
#バックグラウンドジョブを一つkillする
$ kill -SIGTERM %1
#複数のバックグラウンドジョブをkillする
$ kill %2 %3
#プロセスの一時停止/再開
##一時停止
#jobの確認
$ jobs
[4]- 実行中 tail -f /dev/null &
[5]+ 実行中 tail -f /dev/null &
#停止
$ kill -SIGSTOP %4
#確認
$ jobs
[4]+ 停止 tail -f /dev/null
[5]- 実行中 tail -f /dev/null &
##再開
$ kill -SIGCONT %4
$ jobs
[4]+ 実行中 tail -f /dev/null &
[5]- 実行中 tail -f /dev/null &