명령을 파이핑하면 모든 체인에 적용되나요?

명령을 파이핑하면 모든 체인에 적용되나요?

다음 상황을 고려하십시오.

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친화성의 변경은 나중에 인수로 전달된 명령을 실행하는 프로세스(및 친화성은 포크에서 상속되므로 명령 자체에 의해 생성될 수 있는 모든 프로세스) 에만 적용됩니다 .

이 두 명령의 사용 편의성을 향상시키려면 두 가지 별도의 호출이 필요합니다 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 서버 프로세스의 상태에는 영향을 주지 않습니다. 그들 자신.


!timein 및 bashKorn과 같은 일부 다른 쉘은 명령이 아닌 쉘 언어의 키워드입니다. 다음 파이프에 적합합니다. 그러나 뒤에 -p단어가 time오거나 time어떤 방식으로든 인용된 경우에는 time독립 실행형 명령을 실행하므로 인수로 전달된 명령을 통해서만 작동합니다.

관련 정보