Ao usar grep
assim:
ps aux | grep 'processname' | awk '{print $2}'
O PIDs
dos processos com processname
é retornado. Ao usar isso:
ps aux | grep '^processname' | awk '{print $2}'
Estou tentando obter processos com os quais a linha de comando começa processname
, mas não funciona.
Exemplos de processos em execução:
processname
other_processname
Gostaria de pegar PID
a primeira opção, pois processname
é o início do comando.
Também tentei usar os -E, -e, -w
sinalizadores e todos retornaram o mesmo resultado. O que há de incorreto?
Responder1
^
marca o início de uma linha, não de um campo.
ps aux | grep ' processname'
chegará mais perto, mas ainda poderá dar alguns falsos positivos.
Como a largura das outras colunas é fixa, você também pode usar
grep '^.\{65\}processname'
Aqui ^.\{65\}
estão exatamente 65 caracteres desde o início da linha. O número exato pode variar em seu sistema.
Como você já está usando o awk, esta provavelmente seria uma opção melhor:
ps aux | awk '{ if ($11 == "processname") print $2 }'
Você também pode reformatar a saída do ps para facilitar o grep:
ps ax -o pid,args | grep '^[^ ]\+ processname'
A opção -o pid,args
faz com que ps exiba apenas o PID e o comando com argumentos. A expressão ^[^ ]\+
corresponde a todos os caracteres desde o início da linha até o primeiro espaço.