Применяется ли команда nice ко всей цепочке?

Похоже, последнее обновление Debian (61.0 -2 )решило эту проблему. В журнале изменений говорится, что они прекратили компиляцию FF с системным пакетом hunspell.

8
27.08.2020, 11:18
1 ответ

Нет,nice(в отличие от ключевых слов оболочки !или time, например¹ )— это отдельная команда, поэтому она не может применяться к другим командам, которые передаются ей или к которым она передается..

Изменение корректности применяется только к процессу, который niceвыполняется в котором позже будет выполняться команда, переданная в качестве аргументов (, и ко всем процессам, которые эта команда может сама порождать, поскольку корректность наследуется при разветвлении ). ].

Если вы хотите улучшить качество обеих команд, вам понадобятся два отдельных вызова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...много процессорного времени, используемого этой операцией, будет потрачено процессом mysqld, обрабатывающим запросы от mysqldump, а niceустанавливает только качество процесса, который выполняется mysqldump, что не влияет на качество самих серверных процессов MySQL.


!и timeв bashи некоторые другие Korn -, подобные оболочкам, являются ключевыми словами в языке оболочки, а не командами. Они относятся к следующему конвейеру. Помните, однако, что если после timeесть слово -pили если timeкаким-либо образом заключено в кавычки, вместо этого запускается отдельная команда timeи, следовательно, применяется только к команде, переданной в качестве ее аргументов.

11
18.03.2021, 23:09

Теги

Похожие вопросы