
考虑以下情况
nice -10 mysqldump -u crontab -p'readonly' --databases "$1" | gzip > $hour_folder"/"$1"_h"$hour".sql.gz"
请问是nice
只适用于mysqldumnp
还是也适用gzip
?
答案1
不, (例如,与或shell 关键字nice
相反)是一个独立命令,因此它不能应用于通过管道传输到它或通过管道传输到的其他命令。!
time
友善度的更改仅适用于nice
稍后执行作为参数传递的命令的进程(以及该命令本身可能产生的所有进程,因为友善度是在 fork 上继承的)。
如果您想提高这两个命令的易用性,则需要两次单独的调用nice
:
nice cmd1 | nice cmd2
或者nice
启动一个启动管道的 shell:
nice sh -c 'cmd1 | cmd2'
renice
或者,您可以在启动管道之前提高当前 shell 或子 shell 进程的性能(注意某些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 的 shell 是 shell 语言中的关键字,而不是命令。它们适用于以下管道。但请注意,如果后面有一个-p
单词time
或者time
以任何方式引用,则time
运行独立命令,因此仅适用于作为其参数传递的命令。