過去問ドリル

LinuCレベル1 Linuxのインストールと仮想マシン・コンテナの利用 問45

Linuxのインストールと仮想マシン・コンテナの利用/プロセスの生成、監視、終了

bashで sleep 1000 & を実行した後、jobs コマンドを実行したところ「[1]+ Running sleep 1000 &」と表示された。このジョブを、PIDを調べずにジョブ番号を使って終了させたい。コマンドとして適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル1の出題範囲「Linuxのインストールと仮想マシン・コンテナの利用」に対応。実際の試験問題ではありません)

正解:D

解説

bashでは、ジョブを「%ジョブ番号」の形式(ジョブ指定子)で指定できます。kill %1 とすると、ジョブ番号1のジョブにSIGTERMが送られて終了します。%を付けずに kill 1 とすると、ジョブ番号ではなくPID 1のプロセス(systemd)を指定したことになるので注意が必要です。jobs -l を使うと、ジョブ番号とあわせてPIDも表示できます。

選択肢ごとの解説

  • A誤り。% を付けない数値はPIDとして解釈されるため、ジョブ1ではなくPID 1のプロセス(systemd)にシグナルを送ろうとします。
  • B誤り。fg %1 はジョブ1をフォアグラウンドに戻すコマンドで、ジョブを終了させるものではありません。
  • C誤り。kill -l 1 はシグナル番号1に対応するシグナル名(HUP)を表示するだけで、プロセスにシグナルは送りません。
  • D正しい。%1 はジョブ番号1を表すジョブ指定子で、kill %1 でそのジョブにSIGTERMが送られます。
LinuCレベル1の問題を演習モードで解く