Comandos para Gerência de Processos

Dalton Serey

Comandos de processos em ambientes Unix

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.

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-Z ou usa o comando fg, é o shell que trata do envio dos sinais apropriados ao processo.