シグナルとは

2021.12.03

フジボウルの寺山です。 最近地震が多くて嫌になりますね、、。いざ大きな地震が起きても自分の身を守れるように正しい行動を覚えて置けるように致しましょう。 今回はシグナルについてです。 Linuxで何かしらのプロセスを動かしている最中、処理が重くて一旦止めたい!ということをしたい場合以下のようなコマンドを送るかと思います。 kill -9 [PID] このコマンドで実施中のプロセスの処理が止まります。実施するのがこわいコマンドでもありますよね、、 このkill -9の9とは、一体なんでしょう?私もあまり気にしてなかったのですが、とあるstudyの際に遅れながらようやく正体を掴めました。 この9とはシグナルの番号です。 ○シグナルとは プロセス間の通信の一種です。 プロセスにシグナルを送信すると、そのプロセスの正常処理に割り込んで、シグナル固有の処理(シグナルハンドラ)が実行されます。 これは、unix系OSにおける限定的なプロセス間通信の形式を使ってプロセスに対し、非同期でイベントの発生を伝えるために使われます。 例えば、 ・ハングしたプロセスにシグナルを送信して強制終了させる ・シグナルを送信してプロセスの処理を一時停止させる とかですね。 シグナルを送信すると、 1.シグナル送信 2.プロセスがシグナルを受信すると、処理を一時中断してカーネルに処理を委ねる 3.受信したシグナルの種類やプロセスの設定に応じておらカーネルがシグナルを処理する とこのような形でシグナルの処理がされます。 実は我々は何気なくこのシグナルを送信しており、先程kill以外にも、割り込みキーctrl+cもこのシグナルだったりします。 他にも、 「systemctl stop service」もデーモン停止コマンドを叩いて(SIGERM)、同一グループに属するプロセスにも停止シグナルを送っております。 さて、このシグナルが我々にどう絡むのか。 それがデーモンで動く処理の際に絡んできます。 次回はそのあたり記載していきます。

この記事を書いた人

寺山 拓未

2014年入社 現在セキュリティ関連の支援ツール開発業務に従事 ロボットアニメ全般が好き