Por exemplo, vamos examinar o valor do PRI do firefox com ps e, a seguir, ver qual é o valor armazenado em 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
De acordo com man proc, encontraremos o valor de PRI no 18º valor (contando a partir de 1), então neste caso PRI = 20
Eu quero saber por que existe essa diferença entre a saída do ps
comando e o valor armazenado no arquivo /proc stat?
Uh, aparentemente o
pri
campo é exatamente 39 menos o valor que está visível em/proc/$pid/stat
(então 39 - 20 = 19). Também é comentado como 'não legal como UNIX "PRI"', já queE isso não se aplica lá.
Mas! Existem nada menos que seis outros formatos de saída para a prioridade, todos com o valor bruto negado ou não, mais alguma constante. Faça uma escolha. Aqui estão três gatos com
nice
valores diferentes:Os comentários no código dizem que
Portanto, provavelmente há algum motivo histórico para corrigir o intervalo de saída para corresponder.
ps -c
usa opri
valor aqui.priority
é o valor bruto como o kernel o apresenta.O arquivo de código-fonte relevante é
ps/output.c
:https://gitlab.com/procps-ng/procps/blob/master/ps/output.c#L585
Também: https://superuser.com/questions/286752/unix-ps-l-priority/286761
e https://stackoverflow.com/questions/18829350/linux-thread-priority-value