Linuxとコマンドラインの基礎

応答しなくなったプロセスを止めるとき、まず「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 で調べます。

  • A. 正しい。SIGTERM は後始末の機会があり、SIGKILL は強制的に終わらせます。
  • B. どちらのシグナルも、指定したプロセスに送られます。子プロセスまで終わるかどうかは、シグナルの種類では決まりません。
  • C. SIGTERM と SIGKILL の性質が逆です。受け取って後始末ができるのは SIGTERM です。
この分野を解く 分野ページへ

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

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

Linuxとコマンドラインの基礎のほかの問題

  1. 端末で時間のかかる ./sim.sh を実行している途中で、同じ端末でほかのコマンドを使いたくなった。Ctrl+Z を押した後に bg を実行したときの動作として、正しいものはどれか。
  2. SSH で接続したサーバで、時間のかかる処理を「./run.sh &」で起動してから接続を切ったところ、処理も止まってしまった。接続を切った後も処理を続けさせる起動のしかたとして、最も適切なものはどれか。
  3. 上の2行をシェルで実行したとき、表示される文字として、正しいものはどれか。
  4. 上のコマンドを順に実行したときの、2つの echo の出力として、正しいものはどれか。
  5. 上のように、スクリプト s.sh を引数を付けて実行したときの出力として、正しいものはどれか。