좋은 가치 또는 CPU 공유?
현재 systemd를 사용할 때 자동 작업 그룹화로 인해 좋은 값이 "시스템 전체"와 관련이 없을 수도 있습니다 . 자세한 내용은 이 답변 을 참조하십시오.
스레드와 프로세스의 차이점
Linux에서 중요한 질문은 문서가 의심을 영속시키기 때문입니다 (예를 들어 자체 PID가없는 스레드에 대한).
참고 : 이 답변은 Linux 스레드를 정확하게 설명합니다.
간단히 말해서 커널은 "실행 가능한 엔티티", 즉 실행 및 예약 가능한 것만 처리합니다 . 커널과 관련하여 이러한 엔티티를 프로세스라고합니다. 스레드는 다른 메모리 공간과 신호 처리기를 공유하는 프로세스의 일종입니다.
이러한 모든 프로세스에는 시스템 전체 고유 식별자 인 PID (프로세스 ID)가 있습니다. 이른바 스레드의 경우 TID (Thread ID)라고도하지만 sysadmin (및 커널!)의 관점에서 TID와 PID는 같은 것입니다 (동일한 네임 스페이스를 공유 함).
결과적으로 각각의 "스레드"에는 자체 PID 1 이 있기 때문에 개별적으로 "스레드" 할 수 있습니다 .renice
재귀 적으로 모든 PID 찾기renice
정리할 프로세스의 하위 (자식 또는 스레드 그룹) 인 모든 프로세스 ( "정상"또는 "스레드")의 PID를 가져와야합니다. 이는 재귀 적이어야합니다 (어린이의 자녀를 고려).
Anton Leontiev의 대답은 힌트를 제공합니다. 모든 폴더 이름은 잠재적 자식 프로세스를 나열 /proc/$PID/task/
하는 children
파일을 포함하는 스레드의 PID 입니다.
그러나 재귀가 부족하기 때문에 신속하고 더러운 쉘 스크립트를 사용하여 찾을 수 있습니다.
#!/bin/sh
[ "$#" -eq 1 -a -d "/proc/$1/task" ] || exit 1
PID_LIST=
findpids() {
for pid in /proc/$1/task/* ; do
pid="$(basename "$pid")"
PID_LIST="$PID_LIST$pid "
for cpid in $(cat /proc/$1/task/$pid/children) ; do
findpids $cpid
done
done
}
findpids $1
echo $PID_LIST
프로세스 PID 1234가 재귀 적으로 좋으면 다음을 수행하십시오.
renice -n 15 -p $(/path/to/findchildren.sh 1234)
1 POSIX의 준수, 전화, 주 getpid(2)
스레드 내에서하는 것입니다 하지 당신이 실행 가능한 엔티티의 시스템 전체의 고유 ID (PID)를 제공, 오히려 "스레드 그룹"내 주요 프로세스의 PID. gettid(2)
대신 전화해야합니다 . 자세한 내용은 이 답변 을 참조하십시오.
man (7) pthreads
현재 (NPTL) 구현에 대해 말합니다. "프로세스의 모든 스레드가 동일한 스레드 그룹에 배치되고 스레드 그룹의 모든 구성원이 동일한 PID를 공유합니다"및 "스레드가 공통의 좋은 값을 공유하지 않습니다". 그렇다면renice
PID를 사용하여 자체 PID가없는 스레드를 어떻게 다시 사용할 수 있습니까?