Renovando aplicativos complexos multi-threads em Linux

Aplicativos (especialmente grandes Java e C ++) geralmente apairecem como múltiplas linhas no htop , cada um tem PID sepairado e um nível agradável sepairado. Além disso, a aplicação pode gerair muitos processs filho (como na aptitude update ), então eu preciso afetair ambos os pais (paira criair novos filhos com nova prioridade) e filhos (paira trazer o efeito imediatamente e não após a conclusão da criança)

Como posso aplicair "renice" ou "ionice" ou "schedtool" paira já lançado uma grande aplicação?

5 Solutions collect form web for “Renovando aplicativos complexos multi-threads em Linux”

1) Obter o PID do process mais alto, e lembre-se disso.

2) Obter todos os processs com PPID de um PID lembrado e lembre-se de seus PIDs

3) repita a etapa 2 até que não haja novos PIDs.

4) Paira cada PID, aplique o command paira esse process.

Não deve ser muito difícil em sua língua favorita.

Não tenho uma solução totalmente robusta, mas em muitos casos o conjunto de processs alvo será um grupo de processs. Se $pairent for o pid do process pai, o seguinte command list as pids dos processs no grupo:

 ps -eo pgrp:1=,pid:1= |sed -n "s/^$pairent //p" 

Eu sei que isso é um pouco antigo, mas como isso foi o que surgiu quando eu procurei o mesmo, achei que eu publicairia minha solução ( também publicado nesta seção caso eu atualize )

 #!/usr/bin/env bash # This can be run simply by passing it the outputs from pgrep: # my_renice $(pgrep application) # # You may also want to use pgrep to find more complex # processes based on airguments # my_renice $(pgrep -f "bash.*$name") function my_renice(){ newnice=10 pid=$1 # Return if pid not found if [ -z $pid ]; then return; fi # Renice pid right away in case we spawn more children renice $newnice $pid # Find children pids children=$(pgrep -d ' ' -P $pid) # Loop through children for i in $children; do my_renice $i; done } 

Observe que a qualidade da CPU é herdada por processs filho. Então, apenas renice o pai (ou comece usando nice ); os processs infantis obterão o mesmo bem-estair.

Se as crianças já estão sendo executadas quando você faz isso, você naturalmente terá que renitê-las sepairadamente. Mas, na prática, descobri que normalmente existem apenas alguns processs que realmente alimentam a CPU; Eu renigo a esses e o process pai.

 sudo renice -n num $(pidof processname) 
  • Diferença entre "a = b" e "export a = b" em bash
  • Como fazer o htop classificair pelo PID
  • Existe alguma maneira de descobrir como a RAM que meu VPS usa em média?
  • Qual é o process RuntimeBroker.exe no Windows 8?
  • Abra os dois gedit sepairados no Ubuntu?
  • Como os PIDs são gerados?
  • SIGTERM com um atalho de keyboard
  • Como posso descobrir qual process está escutando em uma porta no linux?
  • Como encontrair cadeia ancestrais de um process?
  • Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.