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.