Linuxとコマンドラインの基礎
応答しなくなったプロセスを止めるとき、まず「kill プロセスID」を使い、それでも終わらないときだけ「kill -9 プロセスID」を使うのがよいとされる。その理由として、正しいものはどれか。
- A既定の SIGTERM(15番)はプロセスが受け取って後始末をしてから終われるが、SIGKILL(9番)は受け取れず、後始末なしで強制的に終わらせるから
- Bkill が既定で送る SIGTERM(15番)は子プロセスまで含めてすべてを終わらせるが、SIGKILL(9番)は指定したプロセスだけを終わらせるので影響が小さいから
- CSIGKILL(9番)はプロセスが受け取って後始末をしてから終われるが、kill が既定で送る SIGTERM(15番)は無視できず、すぐに終わらせるから
答えと解説を見る
正解:A. 既定の SIGTERM(15番)はプロセスが受け取って後始末をしてから終われるが、SIGKILL(9番)は受け取れず、後始末なしで強制的に終わらせるから
シグナルは、OSがプロセスに出来事を知らせる短い通知で、番号と名前が決まっています。kill はオプションを付けないと SIGTERM(15番)を送り、プログラムはこれを受け取る処理(ハンドラ)を用意して、作業中のファイルを保存したり一時ファイルを消したりしてから終われます。SIGKILL(9番)はプロセスが受け取ることも無視することもできず、カーネルが強制的に終わらせるので、書きかけのファイルが壊れたまま残ることがあります。止めたいプロセスのIDは、ps や top で調べます。
- A. 正しい。SIGTERM は後始末の機会があり、SIGKILL は強制的に終わらせます。
- B. どちらのシグナルも、指定したプロセスに送られます。子プロセスまで終わるかどうかは、シグナルの種類では決まりません。
- C. SIGTERM と SIGKILL の性質が逆です。受け取って後始末ができるのは SIGTERM です。