Como o encanamento neste comando finalmente consegue matar o processo?

3

Eu vi a seguinte linha em um script bash para matar um processo (neste caso iniciado com o comando loadgen ):

ps xww | grep -i "loadgen" | grep "PATTERNMATCH_FACT.xml" | cut -c1-5 | xargs -i kill {} 2>/dev/null

Eu gostaria de entender o motivo da canalização após os dois grep's no comando acima.

A maneira como o comando loadgen é iniciado é o seguinte. Faz parte do script de inicialização.

./loadgen -XMLFile ${DEMODIR}/bam-103-pattern-match/data/PATTERNMATCH_FACT.xml -duration 0 -frequency 2 
    
por Geek 24.12.2013 / 18:20

1 resposta

4

ps xww fornece a seguinte saída

...
    1 ?        Ss     0:00 init [2]
 1804 pts/0    Ss     0:00 -bash
...

Após os dois grep , ele canaliza a saída para cut . Este comando corta o caractere 1-5 da saída. Na saída acima, seria o PID:

    1
 1804

Isso é canalizado para xargs . O Xargs cria comandos semelhantes a este:

kill 1
kill 1804

e os executa. 2>/dev/null significa que todas as mensagens de erro são enviadas para o pseudo dispositivo /dev/null .

Assim, seu comando elimina todos os processos que estão grep ed do comando ps .

Ou veja explicahell .

    
por 24.12.2013 / 18:46