当管道命令时,是否适用于所有链?

当管道命令时,是否适用于所有链?

考虑以下情况

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 服务器进程的良好性没有影响。他们自己。


!timein和bash其他一些类似 Korn 的 shell 是 shell 语言中的关键字,而不是命令。它们适用于以下管道。但请注意,如果后面有一个-p单词time或者time以任何方式引用,则time运行独立命令,因此仅适用于作为其参数传递的命令。

相关内容