Linux / Comando pgrep: encontrar PIDs por nome e usuário

pgrep procura processos por nome e por critérios como usuário e mostra seus identificadores de processo, os PIDs. Ele permite consultar candidatos sem encerrar processos. Use -x para exigir que o padrão corresponda ao nome inteiro e -f para pesquisar na linha de comando completa.

O padrão é uma expressão regular estendida: uma regra de correspondência de texto, e não necessariamente um nome literal. A busca padrão pode corresponder a uma parte do nome; com -f, os argumentos também entram na pesquisa. Confira os resultados antes de usá-los numa operação que altere processos.

Sintaxe e implementação

pgrep [opções] padrão

Confira pgrep --version, pgrep --help e man pgrep na máquina de destino. As opções descritas aqui seguem o manual de procps-ng, o conjunto de utilitários de consulta a processos que fornece essa implementação de pgrep. Outras implementações podem oferecer opções diferentes.

O manual de pgrep do projeto procps-ng distingue três ferramentas: pgrep lista correspondências, pkill envia sinais e pidwait espera processos. Trocar o nome do comando muda a operação; não trate uma consulta de pgrep como autorização para sinalizar todos os resultados.

Pesquisar pelo nome do processo

Para consultar processos cujo nome corresponda ao padrão sshd:

pgrep sshd

Quando há correspondências, a saída padrão contém um PID por linha. Pode haver mais de um processo associado ao serviço, e o nome encontrado não precisa ser exatamente sshd: sem -x, o padrão também pode corresponder a parte de um nome maior.

O programa não inicia o serviço nem comprova que uma conexão SSH está disponível. Para investigar uma lista inesperada, confirme se está pesquisando no sistema e no contexto de processos pretendidos, e depois examine as linhas de comando.

Mostrar o PID e a linha de comando

Acrescente -a para identificar melhor cada correspondência:

pgrep -a sshd

A opção -a muda o que é exibido: inclui a linha de comando completa ao lado do PID. Ela não muda, sozinha, o campo usado na pesquisa. Esse comando ainda pesquisa o nome do processo; já -f troca o campo pesquisado pela linha de comando. É possível combinar -a e -f quando essa busca mais ampla for necessária.

Na implementação documentada, -l mostra o nome junto ao PID; -a mostra a linha de comando. Diferencie essas opções quando precisar conferir argumentos e caminhos, em vez de apenas reconhecer o nome.

Combinar usuário e nome exato

Para restringir a consulta aos processos de alice cujo nome inteiro corresponda a python3:

pgrep -u alice -x python3

Substitua alice por uma conta existente que deseja consultar. A opção -u seleciona pelo identificador de usuário efetivo, que representa a identidade usada nas verificações de acesso do processo. Ela não muda sua conta nem concede privilégios. No manual de procps-ng, -U, com letra maiúscula, seleciona pelo identificador de usuário real.

Os critérios diferentes são combinados: nesse exemplo, o processo precisa satisfazer tanto o usuário quanto o nome. Em uma lista como -u alice,bob, qualquer um dos dois usuários satisfaz o critério de usuário. Não é necessário criar contas para seguir o exemplo; adapte a consulta às contas já existentes.

-x exige correspondência com o campo inteiro, mas o padrão continua sendo uma expressão regular. Para nomes com caracteres como ponto, considere seu significado na expressão. Por exemplo, o padrão 'worker[.]py' trata o ponto como literal. As aspas protegem o padrão da expansão pelo shell, mas não desativam a interpretação de expressão regular por pgrep.

Interpretar a saída e conferir o processo

Repita a consulta com a linha de comando quando precisar conferir um PID:

pgrep -a sshd

Exemplo ilustrativo de uma linha possível, se esse processo e esses argumentos existirem no sistema:

1234 /usr/sbin/sshd -D

Nessa linha, 1234 é o PID e o restante é a linha de comando exibida. Esse número, caminho e argumento não são valores obrigatórios nem uma saída observada nos testes disponíveis. Uma instalação diferente pode mostrar outros argumentos ou vários PIDs.

Antes de qualquer ação sobre um resultado, use uma consulta como ps -p 1234 -o pid=,user=,comm=,args=, substituindo 1234 pelo PID encontrado, para conferir o nome, o usuário e os argumentos. O guia de ps para consultar processos e PIDs explica a seleção de campos.

Um processo pode terminar entre a pesquisa e a consulta seguinte; o mesmo PID também pode ser reutilizado mais tarde. Conferir novamente reduz enganos, mas não torna uma sequência de comandos atômica. Não encaminhe automaticamente uma busca ampla a kill, pkill ou outro comando de alteração sem verificar os alvos e o efeito pretendido.

Opções e campo pesquisado

Opção Efeito
-a Exibe PID e linha de comando; não amplia o campo pesquisado.
-x Exige correspondência do padrão com o nome inteiro, ou com a linha inteira se -f estiver ativo.
-f Pesquisa na linha de comando completa, incluindo argumentos, em vez de somente no nome.
-u usuário Seleciona pelo usuário efetivo; aceita nome ou ID numérico.
-n / -o Seleciona a correspondência iniciada mais recentemente ou há mais tempo, respectivamente.

-n e -o comparam o início dos processos; não escolhem pelo maior ou menor número de PID nem pelo consumo de CPU. O manual alerta que inícios no mesmo intervalo do relógio podem ser indistinguíveis e que -n, -o e -v não podem ser combinados. Não use essas opções como uma garantia de desempate preciso.

Ausência de resultados e limites da consulta

Na implementação procps-ng documentada, pgrep retorna estado 0 quando encontra pelo menos uma correspondência; 1 indica nenhuma correspondência, 2 indica erro de sintaxe e 3 indica erro fatal. Confira o estado imediatamente com printf '%s\n' "$?", antes que outro comando o substitua, e leia também a saída de erro. Apenas ver uma tela vazia não distingue todos esses casos.

Uma consulta sem correspondências não basta para concluir que um serviço está parado ou saudável. Verifique o padrão, o usuário, o momento da consulta e quais processos o contexto atual permite observar. Processos já terminados que ainda constam como defuntos também podem ser informados por pgrep; encontrar um PID não comprova que a aplicação responde.

O manual descreve uma limitação de 15 caracteres no nome consultado a partir de /proc/PID/stat. -f pesquisa /proc/PID/cmdline, mas isso muda o critério e pode incluir processos inesperados por causa dos argumentos. Com -f e -x juntos, o padrão precisa corresponder à linha inteira. O próprio processo pgrep é excluído, mas isso não exclui automaticamente outros processos cuja linha contenha o texto procurado.

A verificação disponível usou Bash 5.3.9 do Git para Windows. Os quatro blocos de consulta passaram pela análise de sintaxe, mas pgrep não estava instalado e as tentativas de execução retornaram 127, o estado de comando não encontrado nesse shell. Não houve verificação de seleção real de processos Linux nem dos estados 0, 1, 2 e 3 de procps-ng; a linha de saída acima é ilustrativa.

Pergunta frequente

Nenhuma saída de pgrep significa um erro?

Uma consulta válida sem correspondências normalmente termina com estado 1 em procps-ng. Confira o estado e a saída de erro para distinguir esse caso de uma opção inválida ou da ferramenta indisponível. Antes de concluir algo sobre o serviço, confirme também os critérios e o contexto da consulta.

Documentação

O manual de pgrep publicado pelo Debian reúne os critérios de seleção, os estados de saída e as limitações de procps-ng. Compare as opções com a ajuda da implementação instalada no sistema em que fará a consulta.