Simule o pgrep usando grep simples

1

Como posso fazer pgrep -U someUserName usando apenas ps e grep ? Ou seja não conta com pgrep sendo definido em um sistema?

    
por Jim 30.03.2012 / 10:28

1 resposta

1

Um caminho:

ps -U someUserName -o pid,comm | awk '/someProcessName/{print $1}'

Observe que você pode obter vários IDs de processo como saída se houver vários processos em execução que correspondam ao nome do usuário e do processo.

A saída ps é realmente feita para apresentação legível, não para ser processada assim. Existem outras ferramentas para fornecer acesso de baixo nível à lista de processos em um formato mais adequado para scripts, como pgrep , Perl / Python / ... e assim por diante.

Para fazer isso usando somente ps e grep como você pede, pode-se fazer

ps -U someUserName -o pid,comm | grep 'someProcessName' | grep -oE '^ *([^ ]*)'

Isso incluirá espaços em branco iniciais, mas isso deve ser um problema na aplicação, por exemplo,

for i in $(ps -U someUserName -o pid,comm | grep 'someProcessName' | grep -oE '^ *([^ ]*)'); do
    kill $i
done

deve funcionar.

Mas, como eu disse, pkill é uma maneira mais correta e robusta e deve estar amplamente disponível.

    
por 30.03.2012 / 10:54