コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

UNIX/Linuxシステムにおけるシグナルとkillコマンドに関してざっくりまとめる

ド基礎を見直そうというたぐいのもの

プロセスとシグナル

Unix/Linuxシステムではプロセスという単位でシステムが動いている。そのプロセスは外からシグナルという形で情報を受け取ることができる

シグナルの使い所

シグナルは他のプロセスから飛んでくるものであり、有る種の信号のようなものである。

シグナルの送り方

一般的にシグナルは kill コマンドを使って送信できる

kill {{ハイフンをつけてシグナル番号、もしくはシグナルの文字列}} {{プロセスID}}

SIGINT のシグナルを 2098 のプロセスに送りたい場合は以下

kill -INT 2098

仮にオプション表記を除くと -TERM を指定した場合と同じ振る舞いになる。

シグナルの一覧

シグナルの一覧は kill -l コマンドで確認ができる

$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL
 5) SIGTRAP  6) SIGABRT  7) SIGEMT   8) SIGFPE
 9) SIGKILL 10) SIGBUS  11) SIGSEGV 12) SIGSYS
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG
17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO   24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM   27) SIGPROF 28) SIGWINCH
29) SIGINFO 30) SIGUSR1 31) SIGUSR2

この数字、もしくはSIGを覗いた文字列を - でオプション指定すると指定のコールが送られる。

振る舞いに関してはそれぞれで上書きが可能なので、一概にコレがこういう動作であるというのは言えないが基本は同じ意味で扱われる。

killコマンドでよく使われる 9)SIGKILL は意味が変わることは少ない。

参考

Working With Unix Processes (English Edition)

Working With Unix Processes (English Edition)