nice値5で起動済みのsleepプロセスがあり、そのPIDはTASK_PIDに保存されている。
util-linux版reniceを使い、対象プロセスのnice値を絶対値12へ変更する。
nice -n 5 sleep 60 &
TASK_PID=$!適切なコマンドはどれか。
実行中プロセスにはreniceを使う。util-linux版では--priorityが絶対値、--relativeが現在値からの増減を明示する。
詳細解説
nice -n 12 "$TASK_PID"niceは新しいコマンドを起動するため、PIDを既存プロセスとして解釈しない。
誤りです。niceの後ろには、新しく実行するコマンド名と引数を置きます。
数値のPIDを既存プロセスとして扱わないため、実行中のsleepは変更されません。
renice --priority 12 --pid "$TASK_PID"--priorityで絶対値12を指定し、--pidで既存PIDを対象にする。
正しい選択肢です。reniceが実行中のTASK_PIDを対象にします。
--priorityは絶対値12を明示するため、開始値5に依存せず変更後は12になります。
renice --relative 12 --pid "$TASK_PID"現在値5へ12を加える相対指定なので、結果は17となり絶対値12にはならない。
誤りです。--relative 12は現在値へ12を加える指定です。
開始値が5なので結果は17となり、変更後を絶対値12にする要件と一致しません。
ps -o ni= -p "$TASK_PID"psはnice値を表示するだけで、実行中プロセスの値を変更しない。
誤りです。psはNI欄を読み取る監視コマンドです。
現在値5の確認には使えますが、プロセス属性を変更する作用はありません。
実際に確かめる
一時的な検証環境で実行できる例です。
nice -n 5 sleep 60 &
TASK_PID=$!
ps -o pid=,ni=,comm= -p "$TASK_PID"
renice --priority 12 --pid "$TASK_PID"
ps -o pid=,ni=,comm= -p "$TASK_PID"
kill "$TASK_PID"期待される結果
変更前: NI欄が5
変更後: NI欄が12
※PIDとメッセージの書式は環境により異なる理解のポイント
- niceとreniceの対象の違い
- 絶対値と相対値の違い
- 一般ユーザーは優先度を上げる方向に制約がある
確認時の注意
- 確認環境: Bash 5.2 / util-linux 2.39以降
- 検証の最後にsleepを終了します。
- 一般ユーザーがnice値を小さく戻す操作は拒否される場合があります。
基礎のおさらい
niceとrenice
niceは新規起動、reniceは実行中プロセスを対象にします。プロセスのライフサイクルで使い分けます。
絶対指定
--priorityは変更後のnice値そのものを指定します。初期値を知らなくても最終値を固定できます。
実装差への配慮
reniceの-nは環境変数や実装で解釈差があり得ます。util-linuxでは--priorityと--relativeを使うと意図が明確です。