Candidatos devem ter a capacidade de gerenciar a prioridade de processos.

  • Saber a prioridade padrão de um job que foi criado;
  • Executar um programa com maior ou menor prioridade que a padrão;
  • Mudar a prioridade de um processo em execução;

ps

O ps é um Snapshot de Processos em execução. Com o ps é possível visualizar a prioridade dos processos. Para isso utilizamos a opção -l.

ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  9850  7589  0  80   0 -  5683 wait   pts/18   00:00:00 bash
4 R  1000  9860  9850  0  80   0 -  7240 -      pts/18   00:00:00 ps

A prioridade é exibida na coluna NI, o processo bash e ps possuem a mesma prioridade 0. ** Vale resaltar que todo o processo por padrão tem prioridade 0 quando executado sem o nice ou renice**.

top

O comando top também exibir a prioridade de um processo.

top
top - 22:44:54 up  3:19,  1 user,  load average: 0,63, 0,95, 1,00
Tarefas: 225 total,   1 executando, 224 dormindo,   0 parado,   0 zumbi
%Cpu(s):  0,8 us,  0,1 sy,  0,0 ni, 99,2 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
KiB Mem :  3932988 total,   254544 free,  1607880 used,  2070564 buff/cache
KiB Swap:  4086780 total,  4086780 free,        0 used.  1548744 avail Mem 

  PID USUÁRIO  PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                             
 1066 root      20   0  652212 187600 158832 S   2,7  4,8   2:53.38 Xorg                                                                
 2029 alphabr+  20   0 1542272 194640  66968 S   1,7  4,9   2:46.47 compiz                                                              
 7589 alphabr+  20   0  663300  37796  29096 S   1,7  1,0   0:03.77 gnome-terminal-                                                     
  196 root      -2   0       0      0      0 S   0,3  0,0   0:02.17 i915/signal:0                                                       
 1899 alphabr+  20   0  664508  47656  31296 S   0,3  1,2   0:06.60 hud-service                                                         
 2108 alphabr+  20   0  886748  36848  30252 S   0,3  0,9   0:06.60 nm-applet                                                           
 2615 alphabr+  20   0 1297152 259912 131092 S   0,3  6,6   4:54.04 chrome                                                              
 9215 root      20   0       0      0      0 S   0,3  0,0   0:00.22 kworker/1:1                                                         
    1 root      20   0  185304   5964   4032 S   0,0  0,2   0:01.64 systemd                                                             
    2 root      20   0       0      0      0 S   0,0  0,0   0:00.00 kthreadd                                                            
    4 root       0 -20       0      0      0 S   0,0  0,0   0:00.00 kworker/0:0H                 

Da mesma forma que o ps é a coluna NI que exibe as informações sobre a prioridade dos processos.

Níveis de prioridades

Esses são os niveis de prioridade de processos:

[-20 .. 0 .. +19]
  • Quanto menor o número acima, maior a prioridade;
  • Ao executar normalmente um processo (sem chamar o nice) o processo tem prioridade 0;
  • Ao executar um processo chamando o nice (Ex: nice firefox) ele vai começar com prioridade 10;
  • Um usuário comum pode apenas diminuir a prioridade de seus processos (verifiquei isso com testes);
  • O root pode aumentar e diminuir a prioridade de processos de qualquer usuário;
  • Apenas o root pode atribuir valores negativos de nice a processos;

nice

Com o nice você pode executar um programa com uma prioridade diferente da padrão. Ou seja maior ou menor.

O comando abaixo ira executar o firefox com prioridade 15. Ou seja um prioridade baixa.

nice -n 15 firefox

O comando abaixo é igual ao anterior. Apenas o -n foi omitido.

nice -15 firefox

Com o comando top podemos visualizar o nice desse programa:

top
top - 22:59:04 up  3:33,  1 user,  load average: 0,85, 1,06, 1,04
Tarefas: 231 total,   1 executando, 230 dormindo,   0 parado,   0 zumbi
%Cpu(s):  0,4 us,  1,0 sy,  3,0 ni, 95,4 id,  0,0 wa,  0,0 hi,  0,2 si,  0,0 st
KiB Mem :  3932988 total,   146528 free,  1849584 used,  1936876 buff/cache
KiB Swap:  4086780 total,  4086780 free,        0 used.  1245840 avail Mem 

  PID USUÁRIO  PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                             
11174 alphabr+  35  15 2232580 270100 140000 S   7,0  6,9   0:09.03 firefox                                                             
11289 alphabr+  35  15 1751416 152908  98200 S   7,0  3,9   0:04.59 Web Content                                                         
 1064 root      20   0  893972  27884   9124 S   0,7  0,7   0:03.09 core                                                                
 2029 alphabr+  20   0 1542412 194784  67048 S   0,3  5,0   3:34.21 compiz                                                              
 2085 alphabr+  20   0  772292  25452  15516 S   0,3  0,6   0:11.54 core                                                                
 2111 alphabr+  20   0 1333584 109268  84432 S   0,3  2,8   0:18.05 nautilus      

Para colocar prioridades negativas (alta prioridade) temos que fazer isso como usuário root.

nice -n -15 firefox

Podemos tambem claro omitir o -n

nice --15 firefox

renice

Alterar a prioridade de processos em execução

O comando abaixo ira alterar o nice do processo 20159.

renice -n 15 20159

Podemos omitir o -n. Observe que no renice removemos por completo, não fica o - como no nice.

renice 15 20159

Para atriuir um valor negativo omitindo o -n. Um valor negativo fica assim:

renice -15 20159

Podemos alterar a prioridade de processos baseados no usuario, assim:

renice -u alphabraga -n 15

Ou do grupo

renice -g developers -n 15