나는 pulseaudio
Gentoo Linux 상자의 프로세스가 -11이라는 좋은 수준을 가지고 있음을 발견했습니다. 하지만 일반 사용자가 소유하고 있음에도 불구하고 어떻게 그렇게 높은 우선순위를 갖게 되었는지 모르겠습니다.
nice
루트가 아닌 사용자는 이 명령을 사용하여 0보다 낮은 우선 순위의 프로그램만 시작할 수 있으며 프로세스에 0보다 높은 우선 순위를 부여하려고 하면 "권한 거부"가 표시된다는 것을 알고 있습니다 .
프로세스는 나(루트가 아닌) 소유이기 때문에 pulseaudio
특별한 처리 없이는 그렇게 높은 우선순위를 얻을 수 없을 것 같습니다.
그래서 제 질문은 "치료"가 pulseaudio
친근감을 감소시킨다는 것입니다.
답변1
PulseAudio는 주로 대기 시간 문제를 방지하고 건너뛰기 없는 오디오 재생을 위해 다른 데스크톱 프로그램보다 높은 우선 순위를 요구합니다. 그러나 PulseAudio에 더 높은 우선순위를 부여하는 과정은 상당히 복잡합니다.
이 특별한 우선순위를 얻으려면 다음을 사용합니다.실시간 제품군( rtkit-daemon
) 프로세스. D-Bus 서비스는 특정 사용자 프로그램에서 실시간 스케줄링을 사용할 수 있도록 하며 남용을 방지하기 위해 몇 가지 엄격한 정책을 시행합니다.
- RLIMIT_RTTIME이 설정된 클라이언트만 RT 예약을 받습니다.
- RLIMIR_RTIME:실시간 예약 정책에 따라 예약된 프로세스가 시스템 호출을 차단하지 않고 소비할 수 있는 CPU 시간의 양에 대한 제한을 지정합니다.
- RT 일정은 일정 설정이 하위 프로세스에 "유출"되지 않도록 SCHED_RESET_ON_FORK가 설정된 프로세스에만 배포되므로 "RT 포크 폭탄"을 사용하여 RLIMIT_RTTIME을 우회하고 시스템 충돌을 일으킬 수 없도록 합니다.
- SCHED_RESET_ON_FORK:설정된 경우 프로세스가 a) 스케줄링 우선순위가 DEFAULT_PRIO(더 높은 경우)로 재설정되고 b) 스케줄링 정책이 SCHED_NORMAL(SCHED_FIFO 또는 SCHED_RR인 경우)로 재설정됩니다.
- 모든 사용자가 제어할 수 있는 리소스를 제한하고 최대 사용자, 프로세스, 스레드만 동시에 RT 스케줄링을 요청할 수 있습니다.
- 특정 기간 내에 제한된 수의 스레드만 RT가 될 수 있습니다.
- 클라이언트 승인이 확인을 통과했습니다.정책 툴킷.
[...] 위에서 지적한 논리에도 불구하고 시스템이 오버로드되면 모든 실시간 스레드를 SCHED_OTHER로 자동으로 강등시키는 카나리아 기반 감시 기능이 포함되어 있습니다. 자세한 내용은카나리아 기반 RT 워치독 [...]
추가 관련 정보:
답변2
@zuazo의 답변은 pulseaudio에 매우 유용합니다. 완전성을 기하기 위해 일반적으로 루트가 아닌 프로세스의 우선 순위가 높은 네 가지 상황이 있음을 지적하겠습니다.
- 실행 중인 프로그램은 setuid-root였으며 자체적으로 높은 우선순위를 부여한 다음 uid를 변경했습니다.
- 프로세스에는 해당 기능이 있습니다
CAP_SYS_NICE
(그리고 자신에게 높은 우선순위를 부여한 후 이를 포기할 수도 있고 포기하지 않을 수도 있습니다). - 해당 프로세스 는 루트로 실행되거나 해당 기능을 가진 다른 프로세스에 의해
CAP_SYS_NICE
높은 우선순위를 부여받습니다 .- 다른 답변에서 언급했듯이 PulseAudio의 경우입니다. 또한 실행하여
sudo renice
모든 프로세스에 더 높은 우선 순위를 부여할 수도 있습니다.
- 다른 답변에서 언급했듯이 PulseAudio의 경우입니다. 또한 실행하여
- 해당 프로세스는 이미 높은 우선순위를 갖고 있으며 설정되지 않은 다른 프로세스의 하위 프로세스입니다
SCHED_RESET_ON_FORK
.
다른 미묘함이 있습니다. 프로세스가 자신에게 "속한다"고 말할 때 실제 UID 또는 유효 UID에 대해 이야기하는 것일 수 있습니다. 유효 UID는 자신에게 높은 우선순위를 부여할 수 있는 루트인지 여부를 결정하는 반면, 실제 UID는 이 작업을 수행한 후 다시 변경할 UID를 어떻게 알 수 있습니까?