procfs의 프로세스 우선순위 값이 다릅니다

procfs의 프로세스 우선순위 값이 다릅니다

예를 들어 ps를 사용하여 firefox의 PRI 값을 확인한 다음 procfs에 어떤 값이 저장되어 있는지 확인합니다.

$ ps -o pid,comm,pri,ni 7000
  PID COMMAND         PRI  NI
 7000 firefox          19   0

$ cat /proc/7000/stat
7000 (firefox) S 1 6447 6447 0 -1 4194304 3162595 624998 158 10 30467 6903 3360 488 20 0 63 0 464836 9472659456 123045 18446744073709551615 94866409246720 94866409429052 140727418541056 0 0 0 0 4096 33572095 0 0 0 17 2 0 0 342 0 0 94866411526576 94866411528296 94866422095872 140727418542495 140727418542520 140727418542520 140727418544095 0

man proc에 따르면 PRI의 값은 18번째 값(1부터 계산)에서 찾을 수 있으므로 이때 PRI = 20입니다.

ps명령의 출력과 /proc 통계 파일에 저장된 값 사이에 왜 그렇게 큰 차이가 있는지 궁금합니다 .

답변1

음, 필드 pri는 정확히 39에서 표시되는 값을 뺀 값입니다 /proc/$pid/stat(따라서 39 - 20 = 19). 또한 "UNIX "PRI"만큼 합법적이지 않음"이라고 언급되었습니다.

Unix98에서는 높은 "PRI" 우선순위가 낮다고만 규정합니다.

하지만 여기에는 해당되지 않습니다.

하지만! 이하도 없습니다우선순위를 위한 기타 출력 형식은 모두 원래 값, 부정 또는 부정과 일부 상수를 갖습니다. 하나를 선택하세요. 다음은 서로 다른 값을 가진 세 마리의 고양이입니다 nice.

$ ps -o pid,rtprio,pri,opri,priority,pri_foo,pri_bar,pri_baz,pri_api,ni,args -Ccat
  PID RTPRIO PRI PRI PRI FOO BAR BAZ API  NI COMMAND
18418      -   0  99  39  19  40 139 -40  19 cat /dev/zero
18419      -  19  80  20   0  21 120 -21   0 cat /dev/zero
18420      -  39  60   0 -20   1 100  -1 -20 cat /dev/zero

코드의 주석은 다음과 같습니다.

Sun과 SCO는 이 -c동작을 추가했습니다. Sun은 "pri"와 "opri"를 정의합니다.

따라서 출력 범위를 일치하도록 수정해야 하는 몇 가지 역사적인 이유가 있을 수 있습니다. 여기에 있는 값을 ps -c사용하세요 . 커널이 렌더링한 원시 값입니다.pripriority

관련 소스 코드 파일은 다음과 같습니다 ps/output.c.
https://gitlab.com/procps-ng/procps/blob/master/ps/output.c#L585

반품:https://superuser.com/questions/286752/unix-ps-l-priority/286761
그리고https://stackoverflow.com/questions/18829350/linux-thread-priority-value

관련 정보