Como todos os processos-filhos ainda fazem parte do ID da sessão ( sess
in ps
output), poderíamos explorar esse fato usando este comando:
$ parent=6187
$ ps -eo sess:1=,pid:1= |sed -n "s/^$parent //p"
Isso deve retornar para nós todos os IDs de processo dos processos filhos gerados a partir de lb load
. Também podemos obter isso diretamente de pgrep
, usando também a opção -s
.
$ pgrep -s $parent
Podemos então renice
deles assim:
$ renice $(pgrep -s $parent)
Exemplo
Aqui está um exemplo artificial que ilustra como isso tudo funciona. Nós começamos com um shell, "PID = 10515".
1. Confirme o ID da sessão$ ps -j
PID PGID SID TTY TIME CMD
10515 10515 10515 pts/8 00:00:00 bash
30781 30781 10515 pts/8 00:00:00 ps
2. Trabalhos falsos
Em seguida, iniciamos alguns trabalhos falsos que nos esquecemos de renice
.
$ sleep 10000 &
$ sleep 10000 &
Confirmamos que estão sob o ID de sessão do nosso shell ( SID
).
$ ps -j
PID PGID SID TTY TIME CMD
10515 10515 10515 pts/8 00:00:00 bash
31107 31107 10515 pts/8 00:00:00 sleep
31111 31111 10515 pts/8 00:00:00 sleep
31140 31140 10515 pts/8 00:00:00 ps
3. Obter PIDs associados ao SID
Podemos obter uma lista de todos os processos, cujo SID
é 10515.
$ pgrep -s 10515
10515
31107
31111
4. Confirme atual agradável
Qual é o nível legal de todos atualmente? Use este comando para verificar:
$ ps -eo sess:1=,pid:1=,nice:1= | grep [1]0515
10515 10515 0
10515 31107 0
10515 31111 0
10515 31354 0
10515 31355 0
5. Mudar legal de todos os descendentes do SID
OK, então todo mundo está nice
em 0, vamos mudar isso.
$ renice $(pgrep -s 10515)
31107 (process ID) old priority 0, new priority 19
31111 (process ID) old priority 0, new priority 19
6. Confirme
Confira nosso trabalho:
$ ps -eo sess:1=,pid:1=,nice:1= | grep [1]0515
10515 10515 0
10515 31107 19
10515 31111 19
10515 31426 0
10515 31427 0
PIDs 31107 & 31111 são os nossos processos de suspensão e nós apenas mudamos de forma agradável para 19 com apenas as informações sobre a qual SID
eles estão associados.
Você também pode verificar ps
output se você estiver realmente paranoico:
$ ps -eaf | grep -E "31107|31111"
saml 31107 10515 0 22:30 pts/8 00:00:00 sleep 10000
saml 31111 10515 0 22:30 pts/8 00:00:00 sleep 10000
saml 31531 10515 0 22:35 pts/8 00:00:00 grep --color=auto -E 31107|31111
Referências
ionice
Se você está tentando controlar a prioridade de E / S dos processos, bem como seu nível legal, você deve poder alterar o exemplo de comando acima para algo como isto:
$ renice -n 19 $(pgrep -s $parent)
$ ionice -c 3 -p $(pgrep -s $parent)
Se você observar a página do manual de ionice
, não será possível misturar -c 3
com -n
.
-c, --class class
Specify the name or number of the scheduling class to use; 0 for
none, 1 for realtime, 2 for best-effort, 3 for idle.
-n, --classdata level
Specify the scheduling class data. This only has an effect if
the class accepts an argument. For realtime and best-effort, 0-7
are valid data (priority levels).