Existem alternativas ao pidof? (pegada menor)

2

Bem, acabei de descobrir que, com o uso extensivo de pidof em intervalos muito curtos , a ferramenta aparentemente pequena pode ser uma excelente CPU hog . (Fonte: top )
Na minha máquina mais antiga, ele pode atingir facilmente 30% de pico especialmente no uso em lotes, mas apenas por um curto período, mas acho que para uma tarefa simples como encontrar o PID de um processo, a área de cobertura de tal ferramenta deve ser um quinto pidof (se for o caso).

É também por isso que me pergunto se seria mais sensato "construir" a descoberta do ID do processo com ferramentas padrão integradas. Não seria surpreendente para mim se a soma de carga da CPU causada pela execução de todo o pipe gerenciado permanecesse abaixo da carga causada pela execução de pidof standalone.

Além disso, seria interessante saber o que está causando esses altos picos. Talvez haja alguém aqui entre vocês que cavou um pouco mais no código pidof ? :)

    
por syntaxerror 22.10.2014 / 20:47

2 respostas

1

Aqui estão alguns exemplos para encontrar pids de processos chamados "apache2". Existem pequenas diferenças (novas linhas na saída) entre estas e pidof , mas deveriam funcionar da mesma maneira, em pipelines, etc.

Usando pidof :

$ pidof apache2
31751 31750 31749 31748 31747 31489 31488 31487 31486 31485 1500

Nova linha separada:

$ ps aux | grep apache2 | grep -v grep | awk -n '{print $2}'
1500 
31485 
31486 
31487 
31488 
31489 
31747 
31748 
31749 
31750 
31751 

Espaço separado:

$ ps aux | grep apache2 | grep -v grep | awk -n '{printf $2" "}'
1500 31485 31486 31487 31488 31489 31747 31748 31749 31750 31751 

Eu fiz alguns timings idiotas dos comandos acima.

$ date +%T:%N; pidof apache2 ;  date +%T:%N
17:06:05:627088798
31751 31750 31749 31748 31747 31489 31488 31487 31486 31485 1500
17:06:05:634500908

$ date +%T:%N; ps aux | grep apache2 | grep -v grep | awk -n '{printf $2" "}' ;  date +%T:%N
17:06:29:887314682
1500 31485 31486 31487 31488 31489 31747 31748 31749 31750 31751
17:06:29:903997288

pidof: 7,412,110 nanossegundos

ps | grep | awk: 16.682.606 nanossegundos

Na minha máquina, pidof é carregado mais rápido (conforme esperado).

A saída de pidof parece ser ordenada de forma inversa, por isso seria a minha alternativa alternativa preferida:

$ ps aux | grep apache2 | grep -v grep | awk -n '{print $2}' | sort -rn
31751
31750
31749
31748
31747
31489
31488
31487
31486
31485
1500
    
por 06.09.2016 / 23:19
0

Concordo que é estranho que pidof esteja aumentando para 30%. Mas se é apenas um pico temporário, isso seria uma coisa tão ruim?

Como alternativa, você pode usar ps(1) . Exemplo:

$ ps ax | grep firefox
8621 ??  S       5:20.24 firefox
10409 p3  R+      0:00.00 grep firefox
    
por 06.09.2016 / 20:32