Help us understand the problem. What is going on with this article?

[CentOS 8]killコマンドによるプロセスの終了(メモ)

はじめに

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 &
dingtianhongjie
好きなOSはSolaris 最近はKubernetesを勉強してるので、勉強した結果を自分なりの理解でまとめています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away