プロセスへのシグナル送信 ~killコマンド~
本記事の対象者
LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。
今回の内容
今回は、プロセスへのシグナル送信について解説します。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 |
[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シグナル名 プロセス名 |
[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