Comando pgrep: encontrar o PID pelo nome, a opção -f e a diferença entre pidof e pkill
Para encontrar o número (PID) de um processo em execução pelo nome, pela conta ou pela linha de comando, use o comando pgrep. Em um servidor AlmaLinux 9, copiamos o programa sleep com outros nomes, iniciamos três processos e comparamos os processos encontrados por cada opção. Na busca pelo nome saíram só esses três processos, e na busca em toda a linha de comando com -f saiu também o timeout que os iniciou.
As saídas abaixo vêm da conta root de um servidor AlmaLinux 9.8 e de uma conta comum de um servidor Debian 12. Os processos procurados são cópias do sleep com os nomes pgdemo-a e pgdemo-b, iniciadas com timeout 300 para terminarem sozinhas depois de 5 minutos. Os números de processo (PID) e o nome da conta do Debian (user1) foram trocados por valores de exemplo, e a versão do procps-ng no servidor AlmaLinux aparece só até a versão principal e secundária.
1️⃣ Uso básico do comando pgrep
Se você escrever parte de um nome depois de pgrep, ele mostra os números dos processos cujo nome contém esses caracteres, um por linha. Na busca por pgdemo saíram três números: dois pgdemo-a e um pgdemo-b.
pgrep pgdemo2143
2152
2155Escrevendo o nome até pgdemo-a, sobraram só os dois pgdemo-a.
pgrep pgdemo-a2143
2152O texto procurado é lido como expressão regular estendida e, sem opções, a busca é feita só no nome do processo.
Se nenhum processo corresponder, ele termina sem mostrar nada, então confira o resultado pelo código de saída. Depois de procurar o nome inexistente pgdemo-zz, executar [echo $?] retornou 1.
pgrep pgdemo-zzecho $?1Executando sem nenhuma condição, saiu o erro abaixo junto com o código de saída 2. A página man descreve os códigos de saída como 0 (encontrado), 1 (não encontrado), 2 (erro de sintaxe na linha de comando) e 3 (erro fatal, como falta de memória).
pgreppgrep: no matching criteria specified
Try `pgrep --help' for more information.echo $?2Usando esse código de saída como condição em vez da saída, um script consegue verificar se um processo está em execução. A versão aparece com [pgrep -V]. O servidor Debian 12 tinha procps-ng 4.0.2 e o servidor AlmaLinux 9.8, procps-ng 3.3.
pgrep -Vpgrep from procps-ng 4.0.22️⃣ A opção pgrep -f e a saída de -l e -a
Só pelo número não dá para saber qual é o processo, então mostre também o nome com -l ou toda a linha de comando com -a.
pgrep -l pgdemo2143 pgdemo-a
2152 pgdemo-a
2155 pgdemo-bpgrep -a pgdemo2143 ./pgdemo-a 300
2152 ./pgdemo-a 301
2155 ./pgdemo-b 300Os valores 300 e 301 no fim da saída de -a são os argumentos em segundos passados ao sleep. Com esses argumentos distinguimos os dois pgdemo-a de mesmo nome.
Com -f, a busca é feita em toda a linha de comando em vez do nome. Procurando pgdemo-a com -f, os números passaram de dois para quatro.
pgrep -f pgdemo-a2141
2143
2150
2152Acrescentando -a, vimos que as duas linhas a mais eram os timeout que receberam pgdemo-a como argumento. O nome deles é timeout, mas a linha de comando contém pgdemo-a, por isso atenderam à condição de -f.
pgrep -af pgdemo-a2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 301Ao usar -f dentro de um script, confira se o próprio script aparece no resultado. O pgrep nunca inclui a si mesmo no resultado, mas, se a linha de comando do script que executou o pgrep contiver o texto procurado, esse script também aparece.
Ao procurar pgdemo-a com chk.sh, um script que repassa o texto recebido sem mudanças para [pgrep -af], a última linha trouxe o próprio script: bash chk.sh pgdemo-a.
bash chk.sh pgdemo-a2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 301
2160 bash chk.sh pgdemo-aO padrão [p]gdemo-a, que coloca a primeira letra entre colchetes, encontra o mesmo texto que pgdemo-a como expressão regular, mas na linha de comando do script os colchetes aparecem como estão, então ela deixa de corresponder. Passando esse padrão ao mesmo script, a linha do script sumiu e ficaram só quatro linhas.
bash chk.sh '[p]gdemo-a'2141 timeout 300 ./pgdemo-a 300
2143 ./pgdemo-a 300
2150 timeout 300 ./pgdemo-a 301
2152 ./pgdemo-a 3013️⃣ Opções de condição do pgrep
Com -x, o pgrep só encontra processos cujo nome inteiro é igual, e não uma parte. Com pgdemo não saiu nada, e com pgdemo-a saíram dois.
pgrep -x pgdemopgrep -lx pgdemo-a2143 pgdemo-a
2152 pgdemo-a-u filtra os processos pela conta que os iniciou. Se você escrever várias contas separadas por vírgulas, ele encontra todos os processos de qualquer uma delas. Os três processos iniciados como root saíram todos com [-u root], e com [-u daemon] não saiu nenhum.
pgrep -u root -l pgdemo2143 pgdemo-a
2152 pgdemo-a
2155 pgdemo-bpgrep -u daemon -l pgdemopgrep -u root,daemon -c pgdemo3Com uma conta que não existe, saiu o erro [invalid user name] junto com o código de saída 2.
pgrep -u no-such-user9 pgdemopgrep: invalid user name: no-such-user9Na conta comum do servidor Debian 12 também encontramos, com as mesmas opções, o único sleep iniciado com essa conta.
pgrep -u user1 -l sleep3047 sleeppgrep -u user1 -a sleep3047 sleep 60Quando há vários processos com o mesmo nome, -n mostra só o iniciado mais recentemente e -o só o iniciado primeiro. Dos dois pgdemo-a iniciados com 2 segundos de intervalo, -n escolheu o mais novo e -o o mais antigo.
pgrep -n pgdemo-a2152pgrep -o pgdemo-a2143A página man diz que -n e -o não podem ser usadas juntas. Com as duas, saiu só o modo de uso, sem mensagem de erro.
-c mostra a quantidade em vez dos números. Se não encontrar nada, mostra 0 e o código de saída foi 1.
pgrep -c pgdemo3pgrep -c pgdemo-zz0Este é o resumo das opções do pgrep.
| Opção | Copiar | Descrição |
|---|---|---|
| -f--full | Procurar em toda a linha de comando em vez do nome | |
| -l--list-name | Mostrar o nome junto com o número | |
| -a--list-full | Mostrar toda a linha de comando junto com o número | |
| -x--exact | Encontrar só processos cujo nome inteiro é igual | |
| -u--euid | Só processos iniciados pela conta indicada; com várias separadas por vírgulas, qualquer uma delas | |
| -n--newest | O iniciado mais recentemente entre os que correspondem | |
| -o--oldest | O iniciado primeiro entre os que correspondem | |
| -c--count | Mostrar a quantidade em vez dos números; código de saída 1 se for 0 | |
| -d--delimiter | Definir o separador entre os números (quebra de linha por padrão) | |
| -V--version | Mostrar a versão |
| Opção | Copiar | Descrição |
|---|---|---|
| -i--ignore-case | Procurar sem diferenciar maiúsculas e minúsculas | |
| -v--inverse | Encontrar processos que não correspondem | |
| -P--parent | Só processos filhos do número de pai (PPID) indicado | |
| -t--terminal | Só processos ligados ao terminal indicado | |
| -g--pgroup | Só processos do número de grupo de processos indicado | |
| -s--session | Só processos do número de sessão indicado | |
| -U--uid | Só processos com o mesmo ID de usuário real | |
| -G--group | Só processos com o mesmo ID de grupo real | |
| -w--lightweight | Mostrar todos os números de thread em vez dos números de processo |
🔲 Simulador do comando pgrep
O simulador abaixo começa com uma lista das seis linhas de pgdemo e timeout mais processos de exemplo. Toque nos chips para comparar na lista à esquerda as linhas que cada opção encontra, e veja com [pgrep -l pgdemo] como o resultado diminui depois de [pkill pgdemo-b].
4️⃣ Diferença entre pgrep, pidof e pkill
O pidof encontra, sem expressões regulares, só os processos cujo nome de programa inteiro é igual, e mostra os números em uma linha separados por espaços. Na busca por pgdemo-a saíram os dois números em uma linha, com o 2152, iniciado depois, na frente.
pidof pgdemo-a2152 2143Com o nome parcial pgdemo, ao contrário do pgrep, o pidof não encontrou nada, e o código de saída foi 1. Se você precisa de um só número, acrescente -s. [pidof -s pgdemo-a] mostrou só 2152.
pidof pgdemopidof -s pgdemo-a2152Para ver a hora de início e o número do pai (PPID) dos números encontrados, junte-os com vírgulas usando pgrep -d e passe-os para o -p do comando ps.
pgrep -d, pgdemo2143,2152,2155ps -fp $(pgrep -d, -x pgdemo-a)UID PID PPID C STIME TTY TIME CMD
root 2143 2141 0 15:59 ? 00:00:00 ./pgdemo-a 300
root 2152 2150 0 15:59 ? 00:00:00 ./pgdemo-a 301Os valores 2141 e 2150 na coluna PPID são os números dos timeout que iniciaram os dois pgdemo-a.
O pkill encontra processos com as mesmas condições do pgrep, mas, em vez de mostrar os números, envia um sinal a eles. Sem sinal indicado, envia SIGTERM, e você pode trocar o sinal como em [pkill -HUP nome].
O pkill envia o sinal assim que encontra uma correspondência, então confira primeiro os alvos com [pgrep -a] ou [pgrep -af] e as mesmas condições. Com -f, os timeout ou scripts cuja linha de comando contém o mesmo texto também viram alvos. Se você já sabe o número, envie o sinal só para esse número com o comando kill.
| Comando | Critério de busca | Saída | Tarefa |
|---|---|---|---|
| pgrep | Parte do nome (regex) ou, com -f, toda a linha de comando | Números; nome e linha de comando com -l, -a | Só procura |
| pidof | Nome inteiro do programa | Números em uma linha | Só procura |
| pkill | Mesmas condições do pgrep | Nenhum | Sinal aos processos encontrados (SIGTERM por padrão) |
🔢 FAQ & conteúdo recomendado
Verificação em tempo real
Comando top do Linux (ver uso de CPU e memória)
Comando que mostra em tempo real quanta CPU e memória cada processo usa.
Arquivos abertos
[Linux] Comando lsof: mostrar informações de arquivos em uso
Comando que mostra os arquivos abertos por um processo, junto com o PID.
Controle de jobs
Segundo plano (Back Ground) e primeiro plano (Fore Ground) no Linux: controlar processos
Método de controle de jobs para mandar um comando para o segundo plano e trazê-lo de volta ao primeiro plano.
ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.