모든 프로세스가 쉘에서 실행되고 실행되는 프로세스의 우선순위가 낮도록 쉘을 시작하려면 어떻게 해야 합니까?

모든 프로세스가 쉘에서 실행되고 실행되는 프로세스의 우선순위가 낮도록 쉘을 시작하려면 어떻게 해야 합니까?

PC를 사용하는 동안 백그라운드에서 길고 복잡한 CPU 및 IO가 많은 명령줄 작업을 시작하고 싶습니다. 보통 우선순위로 실행하면 시스템의 응답성이 저하됩니다. 모든 프로세스가 실행되고 실행 중인 프로세스의 우선 순위가 낮은 쉘(작업이 실행될)을 시작하는 방법은 무엇입니까?

답변1

쉘이든 무거운 명령(자체가 쉘 스크립트일 수 있음)이든 우선순위가 낮은 프로세스에서 명령을 실행하려면 Linux에서 다음을 수행할 수 있습니다.

nice ionice -c idle the-command and its arguments

nice이는 표준 ionice이며 Linux에만 해당됩니다.

일부 쉘 코드를 실행하려면 sh -c다음 명령을 사용하십시오.

nice ionice -c idle sh -c '
  for i in foo bar; do
    heavycmd "$i" > "$i.log"
  done'

nice선호도를 독립적으로 높이려면 10이 옵션을 사용하여 다양한 증분을 지정할 수 있습니다 -n.

zsh셸 에서 이 bgnice옵션을 설정하면(대화형에서는 기본적으로 설정됨) 백그라운드에서 실행되는 모든 명령의 선호도가 5씩 증가합니다.

(t)csh셸 에는 nice셸의 친화성을 변경하는 내장 명령이 있습니다(구문은 nice표준 명령( nice +10 cmd임의의 친화성을 지정(증가 없음!))과 다르며 기본 친화성은 4입니다).

자신의 친근성 변경을 지원하지 않는 쉘에서는 대신 사용할 수 있습니다 renice. 조심하세요renice -n 5 "$pid"현재 POSIX 요구사항줄이다이드 프로세스의 장점이 $pid5 증가합니다., 그러나 이것은 내가 알고 있는 어떤 구현에서도 발생하는 것이 아니며 분명히허점POSIX 사양 1에서. 실제로는 호감도를 5²로 설정하거나증가하다5.

실제로 renice -n 20 "$pid"친화도가 처음부터 부정적이지 않다고 가정하면 최소한 Linux에서는 친화도가 가장 높은 값으로 설정됩니다.

nice(1970년대 중반 Unix V4에 도입됨) 처음에는 숫자 인수를 사용하지 않았습니다 . Unix V7과 csh(V6 기반 BSD)에서는 숫자 매개변수가 독립적으로 추가되었지만 방식은 달랐습니다. V7에서는 nice -5 cmdNiceness를 5만큼 증가시키는 반면 csh(위 참조)에서는 이를 로 설정합니다 -5. renice원래는 BSD에서 왔으며 csh nice( renice +5 "$pid"Niceness를 5로 설정)와 일치합니다.

이 역사는 오늘날 세상 밖에서 친근감이 증가하거나 감소하는 이유를 csh설명 nice -5합니다 renice -5. 나는 이것이 주요 옵션 이름을 제거하고 깨끗한 API를 사용하려고 도입된 -nPOSIX 발명품(예: for )이라고 생각합니다 (niceness 값도 이식 불가능하므로 증분을 처리하는 것이 더 합리적입니다).head -n+

ionice다른 프로세스의 I/O 우수성은 -p해당 옵션을 통해 변경할 수도 있습니다.

따라서 쉘(여기서는 Bourne과 유사한 쉘) 내부에서 다음을 사용하여 쉘 인터프리터를 실행하는 프로세스의 장점을 변경할 수 있습니다.

renice -n 20 "$$"
ionice -c idle -p "$$"

또는 현재 하위 셸의 상태를 변경합니다.

(
  pid=$(sh -c 'echo "$PPID"')
  renice -n 20 "$pid"
  ionice -c idle -p "$pid"

  # do stuff in the subshell with lower priority / higher niceness
)

bash쉘 에서는 현재 서브쉘 pid를 얻기 위해 and $BASHPIDin zshwith $sysparams[pid](behind )를 사용할 수도 있습니다. 셸은 하위 프로세스가 있는 하위 셸 환경을 구현하지 않으므로 위의 내용은 전역 양성에 영향을 미칩니다 zmodload zsh/system.ksh93


1에 소개됨SUSv3, 이것이전 버전(원래 reniceAPI도 지정함(더 이상 사용되지 않음))은 양수 값이 감소했음을 올바르게 나타냅니다.우선순위, 친절하지 않다

² util-linux구현과 동일합니다. 이것은허점.-n2009년에 추가됨-nPOSIX 준수를 위해, 그러나 관리자는 이것이 필요하다는 것을 깨닫지 못했습니다.증가POSIX 사양에서. 도움말 메시지2010년부터의미한다증가,그러나 그것은 진실이 아니다.

관련 정보