nice
레벨 지정과 하위 프로세스 사이의 관계가 무엇인지 말해 줄 수 있는 사람이 있습니까?
예를 들어 기본값이 이고 nice
일부 하위 프로세스(이 경우 약 20개의 병렬 프로세스)를 시작하는 0
스크립트를 실행하는 경우 nice 5
하위 프로세스의 이점은 무엇입니까?
답변1
하위 프로세스는 nice
포크 당시 상위 프로세스가 보유하고 있던 모든 값을 상속합니다(귀하의 예에서는 5
).
그러나 nice
하위 프로세스를 포크한 후 상위 프로세스의 값이 변경되면 하위 프로세스는 새 nice
값을 상속하지 않습니다.
모니터링 도구를 사용하면 이를 쉽게 관찰할 수 있습니다 top
. nice
필드(NI)가 기본적으로 표시되지 않는 경우 f
을 누르고 선택하여 추가 할 수 있습니다 I
. 그러면 디스플레이 NI
에 열이 추가 됩니다.top
* I: NI = Nice value
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1937 root 20 0 206m 66m 45m S 6.2 1.7 11:03.67 X
좋은 정보가 나오네요man 2 fork
fork()는 호출 프로세스를 복사하여 새 프로세스를 생성합니다. 새 프로세스(하위 프로세스라고 함)는 다음을 제외하고 호출 프로세스(상위 프로세스라고 함)와 동일합니다.
- 하위 프로세스에는 고유한 프로세스 ID가 있으며 이 PID는 기존 프로세스 그룹(setpgid(2))의 ID와 일치하지 않습니다.
- 하위 프로세스의 상위 프로세스 ID는 상위 프로세스 ID와 동일합니다.
- 자식은 부모의 메모리 잠금(mlock(2), mlockall(2))을 상속하지 않습니다.
- 하위 프로세스의 프로세스 리소스 사용률(getrusage(2)) 및 CPU 시간 카운터(times(2))가 0으로 재설정됩니다.
- 자식의 보류 중인 신호 세트는 처음에는 비어 있습니다(sigpending(2)).
- 자식은 부모(semop(2))로부터 세마포어 조정을 상속받지 않습니다.
- 자식은 부모로부터 레코드 잠금(fcntl(2))을 상속받지 않습니다.
- 하위 프로세스는 상위 프로세스로부터 타이머(setitimer(2), Alarm(2), Timer_create(2))를 상속받지 않습니다.
- 자식은 부모로부터 처리되지 않은 비동기 I/O 작업(aio_read(3), aio_write(3))을 상속하지 않으며 부모로부터 비동기 I/O 컨텍스트도 상속하지 않습니다( io_setup(2) 참조).