Infra Engineer

プロセスへのシグナル送信 ~killコマンド~
2021.09.28
Lv1

プロセスへのシグナル送信 ~killコマンド~

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、プロセスへのシグナル送信について解説します。killコマンドとkillallコマンドを紹介します。

・kill
・killall
まとめ
確認問題

kill

プロセスには、システムプロセスなど明確に終了させなければ動作し続けるものがあります。不具合で終了しなくなってしまうこともあります。また、メモリに空きを作りたい時など、不要なプロセスを終了させたい場面もあります。そのような場合は、プロセスに信号を送って終了させます。このようなプロセスに送る信号のことを「シグナル」といいます。
プロセスとの間でよく使用される主なシグナルには以下のようなものがあります。

シグナル名 シグナルID 動作
HUP(SIGHUP) 1 再起動
INT(SIGINT) 2 割り込み(Ctrl+Cキー)
KILL(SIGKILL) 9 強制終了
TERM(SIGTERM) 15 終了(クリーンアップ)
CONT(SIGCONT) 18 停止しているプロセスを再開
STOP(SIGSTOP) 19 一時停止(Ctrl+Zキー)

そして、これらのシグナルをプロセスに送信する際に使用するのが「kill」コマンドです。

kill
意味 プロセスIDを指定して、プロセスに対してシグナルを送信する。
書式 kill -[シグナル名 | シグナルID] PID
kill -s [シグナル名 | シグナルID] PID
kill -SIGシグナル名 PID
例)
PID1740のプロセスを強制終了。
[user@localhost ~] ps
PID TTY TIME CMD
1418 pts/0 00:00:00 bash
1740 pts/0 00:00:00 top
1741 pts/0 00:00:00 ps
[user@localhost ~] kill -9 1740
[user@localhost ~] ps
PID TTY TIME CMD
1418 pts/0 00:00:00 bash
1743 pts/0 00:00:00 ps

killall

指定したコマンドを実行しているすべてのプロセスにシグナルを送信するには「killall」コマンドを使用します。

killall
意味 プロセス名を指定して、プロセスに対してシグナルを送信する。
書式 killall -[シグナル名 | シグナルID] プロセス名
killall -s [シグナル名 | シグナルID] プロセス名
killall -SIGシグナル名 プロセス名
例)
httpdのプロセスを強制終了。
[user@localhost ~] ps-ef | grep httpd
apache 22458     1  0 10:23 ?            00:00:00 /usr/sbin/httpd
apache 22459     1  0 10:23 ?            00:00:00 /usr/sbin/httpd
apache 22460     1  0 10:23 ?            00:00:00 /usr/sbin/httpd
apache 22461     1  0 10:23 ?            00:00:00 /usr/sbin/httpd
apache 22462     1  0 10:23 ?            00:00:00 /usr/sbin/httpd
apache 22463     1  0 10:23 ?            00:00:00 /usr/sbin/httpd
apache 22464     1  0 10:23 ?            00:00:00 /usr/sbin/httpd
apache 22465     1  0 10:23 ?            00:00:00 /usr/sbin/httpd
root   22477 21829  0 10:26 ?            00:00:00 grep httpd
[user@localhost ~] killall -9 httpd
[user@localhost ~] ps -ef | grep httpd
root   22477 21829  0 10:26 ?            00:00:00 grep httpd

まとめ

今回は、プロセスへのシグナル送信について解説しました。
シグナルは30種類以上あり、「kill -l」コマンドにて利用できるシグナルを確認できます。
通常はTERMシグナルで「終了」させますが、プログラムがハングアップした場合など、正常終了ができないときには「強制終了」させます。強制終了した場合、システムに何らかの障害が発生する可能性があるため、KILLシグナルは、最終手段として使用してください。
一般的に、親プロセスを強制終了すると、その親プロセスから生成された子プロセスも終了します。

最後に確認問題で今回学習した内容を確かめてください。


確認問題

問題

キーボードでCtrl + Zを入力すると、次のシグナルのどれがプロセスに送信されますか?

A) SIGTERM
B) SIGCONT
C) SIGSTOP
D) SIGKILL

解答・解説
答え:C

Ctrl+Zはプロセスに対して一時停止のシグナルを送信します。
A) ⇒ 終了シグナル。
B) ⇒ 再開シグナル。
C) ⇒ 正解です。
D) ⇒ 強制終了シグナル。