シグナル(Unix)とは

しぐなる

Linuxなどで、OSや別のプロセスがプロセスに出来事を知らせる短い通知。番号と名前が決まっていて、kill の既定の SIGTERM(15番)は終了の依頼、SIGKILL(9番)は強制終了、SIGINT(2番)は Ctrl+C、SIGTSTP は Ctrl+Z による一時停止、SIGHUP(1番)は端末の切断を知らせる。プロセスは多くのシグナルについて、受け取ったときの処理(ハンドラ)を用意したり無視したりできるが、SIGKILL と SIGSTOP は受け取ることも無視することもできない。シェルスクリプトでは trap でハンドラを設定する。

「シグナル(Unix)」は、1分野の1問の練習問題に出てきます(Linuxとコマンドラインの基礎など)。

この用語の分野: Linuxとコマンドラインの基礎

シグナル(Unix)の練習問題に挑戦

応答しなくなったプロセスを止めるとき、まず「kill プロセスID」を使い、それでも終わらないときだけ「kill -9 プロセスID」を使うのがよいとされる。その理由として、正しいものはどれか。

  1. A既定の SIGTERM(15番)はプロセスが受け取って後始末をしてから終われるが、SIGKILL(9番)は受け取れず、後始末なしで強制的に終わらせるから
  2. Bkill が既定で送る SIGTERM(15番)は子プロセスまで含めてすべてを終わらせるが、SIGKILL(9番)は指定したプロセスだけを終わらせるので影響が小さいから
  3. CSIGKILL(9番)はプロセスが受け取って後始末をしてから終われるが、kill が既定で送る SIGTERM(15番)は無視できず、すぐに終わらせるから
答えと解説を見る

正解:A. 既定の SIGTERM(15番)はプロセスが受け取って後始末をしてから終われるが、SIGKILL(9番)は受け取れず、後始末なしで強制的に終わらせるから

シグナルは、OSがプロセスに出来事を知らせる短い通知で、番号と名前が決まっています。kill はオプションを付けないと SIGTERM(15番)を送り、プログラムはこれを受け取る処理(ハンドラ)を用意して、作業中のファイルを保存したり一時ファイルを消したりしてから終われます。SIGKILL(9番)はプロセスが受け取ることも無視することもできず、カーネルが強制的に終わらせるので、書きかけのファイルが壊れたまま残ることがあります。止めたいプロセスのIDは、ps や top で調べます。

解説の中の「シグナル(Unix)」

「シグナル(Unix)」が出てくる問題(1問)

  1. 応答しなくなったプロセスを止めるとき、まず「kill プロセスID」を使い、それでも終わらないときだけ「kill -9 プロセスID」を使うのがよいとされる。その理由として、正しいものはどれか。

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

inode SSH 環境変数 Git grep cron シェル シンボリックリンク スーパーユーザ 正規表現

用語集の一覧へ