現在のBashのnice値は0である。現在のBashのnice値は変えず、新しく起動する処理だけをnice値10で開始する。
起動したBash自身がnice値を表示するものとする。
適切なコマンドはどれか。
niceは、新しく起動するコマンドのnice値を調整する。正のnice値はCPUスケジューリング上の優先度を下げる方向に働く。
詳細解説
renice --priority 10 --pid "$$"現在のBash自身のnice値を変更するため、新しく起動する処理だけを変更する要件に合わない。
誤りです。reniceは実行中のPIDを対象にし、$$は現在のBash自身のPIDです。
現在のBashを10へ変更すると後続の子にも影響し得ますが、親を変えないという要件を破ります。
nohup bash -c 'ps -o ni= -p "$$"'nohupはハングアップシグナルへの動作を変えるが、nice値は変更しない。
誤りです。nohupはSIGHUPを無視する状態でコマンドを実行します。
端末切断後の継続とCPU優先度は別の性質であり、nice値10は設定されません。
nice -n -10 bash -c 'ps -o ni= -p "$$"'-10はnice値を下げて優先度を高くする指定であり、nice値10という要件と逆になる。
誤りです。nice -nには、親から継承したnice値へ加える調整値を指定します。
負の値は優先度を高める方向で、一般ユーザーには権限制約もあります。求める正の10と逆です。
nice -n 10 bash -c 'ps -o ni= -p "$$"'niceが新しいBashをnice値10で起動し、呼び出し元のBashのnice値は変更しない。
正しい選択肢です。niceが指定したBashをnice値10で新規起動します。
niceコマンドを実行した親Bashの値は0のままなので、変更対象も要件と一致します。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'parent='; ps -o ni= -p "$$"
nice -n 10 bash -c 'printf "child="; ps -o ni= -p "$$"'
printf 'parent-after='; ps -o ni= -p "$$"期待される結果
parent= 0
child= 10
parent-after= 0
※表示の空白幅は環境により異なる理解のポイント
- niceは新しいコマンドの起動時に使う
- nice値が大きいほど優先度は低い
- 親プロセスのnice値は変わらない
確認時の注意
- 確認環境: Bash 5.2 / GNU coreutils 9.x
- psの出力には先頭空白が付く場合があります。
- 負のnice値による検証は権限を必要とするため行いません。
基礎のおさらい
nice値と優先度
nice値が大きいほど、他の通常プロセスへCPUを譲る方向になる。値そのものと優先度の高低を逆に覚えないことが重要です。
子プロセスへの継承
子プロセスは親のnice値を基礎として起動します。niceコマンドは対象コマンド側の値を調整します。
権限の制約
一般ユーザーは通常、nice値を増やして優先度を下げられます。優先度を上げる変更には権限やリソース制限が関係します。