Tutorial de Linux / Consultar, suspender, retomar e encerrar processos
Para gerenciar processos no Linux, identifique o programa, examine seu estado e uso de recursos e só envie um sinal quando precisar intervir. O ps mostra uma fotografia dos processos; o top atualiza a visualização. Para encerrar um processo, prefira o mecanismo de encerramento do programa ou um pedido com TERM; reserve KILL, que não pode ser tratado pelo processo, para quando as medidas apropriadas anteriores falharem.
Esta aula pratica consulta de estado, controle de tarefas do shell e sinais. Reparentalização, processos zumbis e namespaces de PID são explicados na aula de PID e PPID. Os comandos de consulta pressupõem Linux com as ferramentas procps/procps-ng; implementações mínimas ou camadas de compatibilidade podem oferecer outras opções.
Distinguir processos, tarefas do shell e serviços
Um processo é uma instância de um programa em execução. O PID (process ID) o identifica no contexto observado; o PPID (parent process ID) identifica seu pai atual, que pode mudar. Uma tarefa, ou job, é uma unidade acompanhada por um shell e pode reunir mais de um processo, como em um pipeline. Um identificador como %1 pertence ao controle de tarefas daquele shell; não é um PID válido como identidade global permanente.
Alguns processos pertencem a serviços, mas nem todo processo é um serviço. Antes de encerrar um processo individual de um serviço, examine o estado e os registros pelo gerenciador responsável. Ele pode reiniciar o processo ou administrar outros processos relacionados. Aqui, a prática fica limitada a um processo criado pela sua própria conta para o exercício.
Escolher as colunas necessárias com ps
O ps consulta os processos no momento da execução; a lista não fica congelada depois de exibida. As colunas abaixo permitem comparar PID, pai, usuário, estado, tempo decorrido e linha de comando. -e seleciona todos os processos visíveis nesse ambiente e -o define os campos. Quando souber o alvo, reduza o alcance da consulta ao PID adequado.
ps -eo pid,ppid,user,stat,etime,args
ps -eo pid,ppid,user,%cpu,%mem,stat,args --sort=-%cpu | head
O segundo comando ordena pelo valor de CPU informado, do maior para o menor, e head limita a saída às primeiras dez linhas por padrão, incluindo o cabeçalho. No ps do procps, %CPU relaciona o tempo de CPU acumulado ao tempo de vida do processo; não é simplesmente o consumo no último instante. %MEM relaciona a memória residente à memória física. Não deduza a causa de uma lentidão a partir de uma única fotografia nem compare percentuais de ferramentas diferentes sem entender a medição.
O primeiro caractere de STAT indica o estado principal: R, executando ou pronto para executar; S, espera interrompível; D, espera não interrompível, frequentemente de entrada e saída; T, execução suspensa; e Z, processo encerrado cujo resultado ainda não foi recolhido pelo pai. Caracteres adicionais descrevem outros atributos. O campo ETIME é tempo decorrido desde o início, diferente do tempo efetivamente gasto na CPU.
Observar mudanças com top e procurar candidatos com pgrep
O top atualiza periodicamente a lista e os valores de uso de recursos. A ordenação, o intervalo e os campos dependem da configuração. Use q para sair. Observe vários ciclos e os registros relacionados para distinguir atividade persistente de um pico breve; não confunda espera com erro apenas por um processo não estar em R.
top
O pgrep procura processos por nome; -a acrescenta a linha de comando à saída. Neste exemplo, sleep é uma expressão de busca no nome, não uma garantia de correspondência exata nem uma pesquisa automática em todos os argumentos:
pgrep -a sleep
Para exigir o nome exato, a opção -x pode ser usada como em pgrep -a -x sleep, mas vários processos ainda podem ter esse nome. Confirme usuário, comando e contexto antes de agir. Um alvo pode terminar logo após a consulta, e seu PID pode ser reutilizado. Não copie todos os números de uma busca para um comando de encerramento.
Sem correspondências, pgrep normalmente retorna estado 1; isso não equivale a um erro de sintaxe, que retorna 2. Examine também mensagens de erro e limitações de visibilidade. Para a prática com seu próprio processo, capturar o PID no shell é mais claro do que selecionar apenas pelo nome.
Suspender e retomar seu próprio processo
Execute a prática em um Bash interativo no Linux, mantendo o mesmo shell até concluir. sleep 300 & inicia uma espera de 300 segundos em segundo plano; capture $! imediatamente, antes de iniciar outra tarefa em segundo plano. Neste exemplo simples, ele fornece o PID do sleep. O texto practice PID: apenas identifica a saída; o número varia a cada execução.
Execute uma linha de cada vez. Na primeira consulta com ps, confirme que o PID é positivo, corresponde ao seu sleep 300 recém-criado e tem o proprietário e o pai esperados. Se a criação ou a consulta falhar, pare e verifique a causa antes dos comandos kill. Não use outro processo, um número antigo, um PID de outro usuário ou um serviço em produção como substituto.
sleep 300 &
practice_pid=$!
printf 'practice PID: %s\n' "$practice_pid"
ps -p "$practice_pid" -o pid,ppid,stat,etime,args
kill -STOP "$practice_pid"
ps -p "$practice_pid" -o pid,stat,args
kill -CONT "$practice_pid"
ps -p "$practice_pid" -o pid,stat,args
Depois de STOP, o estado costuma começar com T; após CONT, pode voltar a S ou a outro estado. A entrega do sinal e a observação não são uma operação atômica: confirme o estado e não trate uma linha isolada como uma sequência garantida de resultados. STOP suspende a execução sem encerrar o processo; CONT a retoma. No Linux, STOP, assim como KILL, não pode ser capturado, bloqueado ou ignorado pelo programa.
A suspensão mantém o processo e seus recursos, podendo reter arquivos abertos e bloqueios. Por isso, não é um método de encerramento nem uma intervenção inofensiva em serviços. Depois da observação, retome o processo de prática com CONT antes de pedir sua saída. Se os 300 segundos já tiverem passado, confirme novamente a identidade em vez de reutilizar a variável como se fosse uma referência permanente.
Pedir o encerramento com TERM e verificar o resultado
Conclua no mesmo shell, com o sleep de prática retomado e ainda identificado. TERM pede o encerramento: um programa com um tratador adequado pode fazer a limpeza, mas o sinal não garante que isso aconteça. O comportamento padrão é terminar o processo. O wait do Bash aguarda um filho desse shell e recolhe seu estado; não é uma espera genérica por qualquer PID da máquina.
kill -TERM "$practice_pid"
wait "$practice_pid"
ps -p "$practice_pid" -o pid,stat,args
Se o filho terminou por um sinal, wait retorna um estado maior que 128 no Bash. Isso é diferente de a tarefa ter concluído normalmente com estado 0. Consulte $? imediatamente após wait, se precisar registrar o resultado; outro comando o substitui. Estas linhas são uma prática interativa: em um script com set -e, um retorno não zero pode interromper a execução antes da consulta final. Com controle de tarefas ativo, wait sem -f também pode retornar quando o filho muda de estado, sem ter terminado. Não confunda uma suspensão com encerramento; quando precisar aguardar a terminação mesmo nesse caso, o Bash oferece wait -f.
Se o último ps mostrar apenas o cabeçalho e indicar ausência do PID, normalmente o processo de prática já terminou. Examine o estado de saída e eventuais erros: uma falha de consulta não prova, por si só, que houve encerramento. Se houver uma linha, confirme a identidade outra vez, pois um número reutilizado pode corresponder a outro processo. Se o programa tratar ou ignorar TERM, aguarde conforme seu funcionamento e investigue o estado e os registros; wait pode continuar bloqueado enquanto o filho existir.
kill -KILL PID, com o PID real de um alvo confirmado, não dá ao programa a oportunidade de tratar o sinal ou finalizar suas próprias gravações. Pode deixar dados da aplicação inconsistentes. Considere-o somente quando a identidade, as consequências e a falha do encerramento apropriado estiverem claras. Uma tarefa em D pode não desaparecer imediatamente mesmo após esse sinal: investigue a espera de entrada e saída. Este exercício não precisa de KILL.
A autorização para enviar sinais depende das credenciais e dos privilégios envolvidos, conforme kill(2); não se deve presumir que qualquer PID visível possa ser controlado. Para esta prática, use somente o filho recém-criado pela sua conta e sem sudo. O retorno de sucesso de kill não comprova que o alvo terminou: confirme o resultado separadamente.
Entender primeiro e segundo plano no shell
No Bash, comando & inicia uma tarefa em segundo plano; jobs -l lista as tarefas e os PIDs acompanhados pelo shell atual. A lista não inclui todas as tarefas de outros terminais nem todos os processos do sistema. Depois de a tarefa terminar e ser recolhida, ela pode deixar de aparecer nessa lista.
jobs -l
Com controle de tarefas ativo em um terminal interativo, Ctrl+Z normalmente envia o sinal de suspensão TSTP ao grupo de primeiro plano. Ele difere do STOP usado acima: o programa pode tratar ou ignorar TSTP. Se a tarefa for suspensa, bg %1 a retoma em segundo plano e fg %1 a traz ao primeiro plano. Escolha o número real mostrado por jobs; %1 é apenas um exemplo. Em um shell sem controle de tarefas ativo, fg e bg não oferecem essa mesma operação.
Uma tarefa em segundo plano continua sujeita à sessão, aos sinais e à entrada e saída do terminal; tentar ler do terminal pode suspendê-la. Acrescentar & não a transforma em um serviço confiável que sobreviva ao logout. Para um servidor que exija supervisão contínua, use o mecanismo de serviços adequado ao ambiente. A aula de gerenciamento de unidades com systemctl explica o caso de sistemas que usam systemd.
Como investigar um processo problemático?
- Confirme PID, comando, proprietário e pai com
psoupgrep. Restrinja a busca e considere o contexto de PID; um nome parecido não identifica o alvo com segurança. - Observe vários ciclos do
tope os registros relacionados. Distinga uso persistente de CPU ou memória, espera normal e uma falha concreta. - Verifique se o processo pertence a um serviço. Consulte o estado e os registros pelo gerenciador antes de manipular um filho isolado.
- Quando um processo seu precisar terminar, use seu mecanismo apropriado de saída ou solicite
TERM. Dê tempo à limpeza prevista e escolha uma intervenção adicional somente depois de avaliar a causa e o alvo. - Consulte novamente o resultado e investigue reinícios, recorrência e a causa original. Revalide a identidade: a consulta anterior e uma ação posterior não formam uma operação atômica.
Fontes primárias
Os manuais ps(1), top(1) e pgrep(1) explicam os campos, as medições e as opções de busca. Consulte kill(1) para o comando, kill(2) para autorização e signal(7) para o comportamento dos sinais. O manual do GNU Bash descreve os comandos internos de controle de tarefas e wait e os fundamentos de tarefas em primeiro e segundo plano.




