PCを使用している間、バックグラウンドで長くて複雑なCPUとIOの多くのコマンドラインタスクを開始したいと思います。通常、優先順位で実行するとシステムの応答性が低下します。すべてのプロセスが実行され、実行中のプロセスの優先順位が低いシェル(タスクが実行される)を開始する方法は?
答え1
シェルか重いコマンド(それ自体がシェルスクリプトである可能性があります)であるか、優先順位の低いプロセスでコマンドを実行するには、Linuxで次のことを実行できます。
nice ionice -c idle the-command and its arguments
nice
これは標準ionice
であり、Linux専用です。
一部のシェルコードを実行するには、sh -c
次のコマンドを使用します。
nice ionice -c idle sh -c '
for i in foo bar; do
heavycmd "$i" > "$i.log"
done'
nice
好みを独立して上げるには、10
このオプションを使用してさまざまな増分を指定できます-n
。
zsh
シェルでこのbgnice
オプションを設定すると(インタラクティブではデフォルトで設定されています)、バックグラウンドで実行されるすべてのコマンドの優先順位は5ずつ増加します。
(t)csh
シェルにはnice
、シェルの親和性を変更する組み込みコマンドがあります(構文はnice
標準コマンド(nice +10 cmd
任意の親和性を指定(増加なし))と異なり、デフォルトの親和性は4です)。
自分の親近性の変更をサポートしていないシェルでは、代わりに使用できますrenice
。注意してくださいrenice -n 5 "$pid"
現在のPOSIX要件減らすイードプロセスの利点が$pid
5増加します。しかし、これは私が知っているどんな実装でも起こるものではなく、明らかに抜け穴POSIX仕様1から。実際には好感度を5²に設定したり、増加する5.
実際、renice -n 20 "$pid"
親和性が最初から否定的ではないと仮定すると、少なくともLinuxでは親和性が最も高い値に設定されます。
nice
(1970年代半ばにUnix V4に導入されました)最初は数値引数を使用しませんでした。 Unix V7とcsh(V6ベースのBSD)では、数値パラメータが独立して追加されましたが、方法は異なります。 V7 ではnice -5 cmd
Niceness を 5 だけ増やし、csh (上記参照) ではこれを に設定します-5
。renice
元々はBSDから来ており、csh nice
(renice +5 "$pid"
Nicenessを5に設定)と一致しています。
この歴史は、今日の世界の外で親近感が増減する理由をcsh
説明nice -5
していますrenice -5
。私はこれが主要なオプション名を削除し、きれいなAPIを使用しようとして導入された-n
POSIX発明(例えばfor)であると思います(niceness値も移植できないので、増分を処理する方が合理的です)。head -n
+
ionice
他のプロセスのI / Oの卓越性は、対応する-p
オプションで変更することもできます。
したがって、シェル(ここではBourneに似たシェル)の内部で、次を使用してシェルインタプリタを実行するプロセスの利点を変更できます。
renice -n 20 "$$"
ionice -c idle -p "$$"
または、現在のサブシェルの状態を変更します。
(
pid=$(sh -c 'echo "$PPID"')
renice -n 20 "$pid"
ionice -c idle -p "$pid"
# do stuff in the subshell with lower priority / higher niceness
)
bash
シェルでは、現在のサブシェルpidを取得するためにand $BASHPID
in zsh
with $sysparams[pid]
(behind)を使用することもできます。シェルはサブプロセスを持つサブシェル環境を実装していないため、上記はグローバルポジティブに影響しますzmodload zsh/system
。ksh93
1で紹介SUSv3、これ以前のバージョン(元のrenice
APIも指定しました(廃止))は、正の値が減少したことを正しく示します。優先順位、親切ではない
²util-linux
実装と同じです。これは抜け穴。-n
2009年に追加-n
POSIX準拠のために、しかし管理者はこれが必要であることに気づいていませんでした。増加POSIX仕様で。ヘルプメッセージ2010年から意味する増加しかし、それは真実ではありません。