Vejamos alguns comandos úteis para gerenciar processos em sistemas Unix e semelhantes (Linux, Mac OS, etc).
Iniciando processos Para iniciar um processo, basta digitar o
nome do executável diretamente no shell. É assim que você inicia
um editor de texto ou executa um interpretador, como o python
ou java.
Visualizando processos Frequentemente é necessário saber que processos estão sendo executados. Seja porque algum deles não mais responde ao usuário ou porque ele funciona em background (sem interface visível para o usuário). Para isso, dois comandos são úteis.
ps (process status) lista os processos do usuário
conectados a algum terminal; produz uma lista dos vários
processos e seus respectivos identificadores (PID, ou
process ID);
top mostra vários dados de uso da CPU, processos em execução
e dados sobre cada processo; é semelhante ao ps, mas dá mais
informação e se mantém atualizando em tempo real os dados;
excelente para monitorar ou investigar problemas de desempenho;
para sair de top tecle q.
Interrompendo um processo Às vezes é necessário interromper a
execução de um processo. O comando usado para isso é kill.
Apesar do nome “agressivo”, o verdadeiro propósito do comando é
permitir que o usuário (ou outro processo) envie um sinal a um
determinado processo. Para terminar um processo enviamos a ele
o sinal SIGTERM. Isso pode ser feito usando-se o comando kill ou,
se o processo estiver rodando em um terminal, digitando Ctrl-C
no terminal. Para emitir o sinal com o kill é necessário ter o
identificador do processo (ver comando ps e top acima). O
comando tem a forma kill <PID>.
O processo, contudo, pode capturar o sinal SIGTERM e reagir
como achar mais adequado (isso será definido pelo programa). Isso
é feito para que o processo possa fechar conexões, arquivos e
faça outros procedimentos de encerramento. Na prática, contudo,
pode significar que alguns processos podem não atender ao sinal.
Nesses casos, às vezes se faz necessário terminar o programa à
força com o sinal SIGKILL que força o sistema operacional a
interromper o processo sem repassar-lhe qualquer sinal. Para
enviar o sinal SIGKILL é necessário usar o comando kill com
uma das duas formas abaixo (o 9 é apenas o valor numérico
associado a SIGKILL):
kill -SIGKILL <PID>
kill -9 <PID>
Pausando um processo Também é possível pausar e reiniciar um
processo, usando os sinais SIGSTOP e SIGCONT. Se o terminal
estiver vinculado a um terminal é mais adequado enviar o sinal
SIGSTOP, digitando Ctrl-Z. É importante lembrar que o
processo ficará apenas pausado, mas não terá sido terminado. Para
que retome a execução, é preciso enviar-lhe o sinal SIGCONT.
Novamente, quando se trata de processo rodando em um terminal que
tiver sido parado com Ctrl-Z, é mais adequado usar o comando
fg (de foreground) para que continue executando.
Quando o usuário digita
Ctrl-C,Ctrl-Zou usa o comandofg, é o shell que trata do envio dos sinais apropriados ao processo.