次の状況を考えてみましょう。
nice -10 mysqldump -u crontab -p'readonly' --databases "$1" | gzip > $hour_folder"/"$1"_h"$hour".sql.gz"
これはnice
単に適用可能ですかmysqldumnp
、それとも適用可能ですかgzip
?
答え1
いいえ、nice
たとえば、or shellキーワードとは異なり、)はスタンドアロンコマンドなので、パイプで接続されている他のコマンドには適用できません。!
time
nice
親和性の変更は、後で引数として渡されたコマンドを実行するプロセス(および親和性はフォークから継承されるため、コマンド自体によって生成される可能性があるすべてのプロセス)にのみ適用されます。
これら2つのコマンドの使いやすさを向上させるには、2つの別々の呼び出しが必要ですnice
。
nice cmd1 | nice cmd2
または、nice
パイプを開始するシェルを起動します。
nice sh -c 'cmd1 | cmd2'
renice
あるいは、パイプを開始する前に、現在のシェルまたはサブシェルプロセスのパフォーマンスを向上させることもできます(一部のrenice
実装では置く他人になることの美しさ増加する指定金額に応じて)。
そしてzsh
:
zmodload zsh/system
(renice 10 $sysparam[pid]; cmd1 | cmd2)
そしてbash
:
(renice 10 "$BASHPID"; cmd1 | cmd2)
では、zsh
非同期的に起動されたコマンドのアフィニティが5だけ増加するため(bgnice
オプションが無効になっていない場合)、次のこともできます。
(cmd1 | cmd2 &) &
両方のコマンドの好感度が10増加します。
$ ps -o nice,args | cat
NI COMMAND
0 /bin/zsh
0 ps -o nice,args
0 cat
$ nice ps -o nice,args | cat
NI COMMAND
0 /bin/zsh
10 ps -o nice,args
0 cat
$ nice ps -o nice,args | nice cat
NI COMMAND
0 /bin/zsh
10 ps -o nice,args
10 cat
$ ps -o nice,args | cat &
NI COMMAND
0 /bin/zsh
5 ps -o nice,args
5 cat
$ (ps -o nice,args | cat &) &
NI COMMAND
0 /bin/zsh
10 ps -o nice,args
10 cat
さらにnice mysqldump...
、この操作に使用されるCPU時間のかなりの量はmysqld
要求を処理するプロセスに費やされ、mysqldump
実行nice
プロセスの状態のみを設定しますmysqldump
。これはMySQLサーバープロセスの状態には影響しません。彼ら自身。
!
time
in やbash
Korn などの他の一部のシェルは、コマンドではなくシェル言語のキーワードです。次のパイプに適しています。ただし、後に-p
単語がtime
続くtime
場合、または何らかの方法で引用されている場合は、スタンドアロンtime
コマンドを実行するため、引数として渡されたコマンドを介してのみ機能します。