Controle de execução de processos

Abaixo algumas comandos e métodos úteis para o controle da execução de processos no Linux.

Interrompendo a execução de um processo

Para cancelar a execução de algum processo rodando em primeiro plano, basta pressionar as teclas CTRL+C. A execução do programa será cancelada e será mostrado o aviso de comando. Você também pode usar o comando “kill” para interromper um processo sendo executado.

Parando momentaneamente a execução de um processo

Para parar a execução de um processo rodando em primeiro plano, basta pressionar as teclas CTRL+Z. O programa em execução será pausado e será mostrado o número de seu job e o aviso de comando.

Para retornar a execução de um comando pausado, use “fg” ou “bg”.

O programa permanece na memória no ponto de processamento em que parou quando ele é interrompido. Você pode usar outros comandos ou rodar outros programas enquanto o programa atual está interrompido.

jobs

O comando jobs mostra os processos que estão parados ou rodando em segundo plano. Processos em segundo plano são iniciados usando o símbolo "&" no final da linha de comando (veja “Tipos de Execução de comandos/programas”) ou através do comando bg.

jobs

O número de identificação de cada processo parado ou em segundo plano (job), é usado com os comandos “fg” e “bg”. Um processo interrompido pode ser finalizado usando-se o comando kill %[num], onde [num] é o número do processo obtido pelo comando jobs.

fg

Permite fazer um programa rodando em segundo plano ou parado, rodar em primeiro plano. Você deve usar o comando jobs para pegar o número do processo rodando em segundo plano ou interrompido, este número será passado ao comando fg para ativa-lo em primeiro plano.

fg [número]

Onde número é o número obtido através do comando jobs.

Caso seja usado sem parâmetros, o fg utilizará o último programa interrompido (o maior número obtido com o comando jobs).

Exemplo: fg 1.

bg

Permite fazer um programa rodando em primeiro plano ou parado, rodar em segundo plano. Para fazer um programa em primeiro plano rodar em segundo, é necessário primeiro interromper a execução do comando com CTRL+ Z, será mostrado o número da tarefa interrompida, use este número com o comando bg para iniciar a execução do comando em segundo plano.

bg [número]

Onde: número número do programa obtido com o pressionamento das teclas CTRL+Z ou através do comando jobs.

kill

Permite enviar um sinal a um comando/programa. Caso seja usado sem parâmetros, o kill enviará um sinal de término ao processo sendo executado.

kill opções] [sinal] [número]

Onde:

número

É o número de identificação do processo obtido com o comando “ps”. Também pode ser o número após o sinal de % obtido pelo comando jobs para matar uma tarefa interrompida. Veja “jobs”.

sinal

Sinal que será enviado ao processo. Se omitido usa -15 como padrão.

opções, -9

Envia um sinal de destruição ao processo ou programa. Ele é terminado imediatamente sem chances de salvar os dados ou apagar os arquivos temporários criados por ele.

Você precisa ser o dono do processo ou o usuário root para termina-lo ou destruí-lo. Você pode verificar se o processo foi finalizado através do comando ps. Os tipos de sinais aceitos pelo GNU/Linux são explicados em detalhes em “Sinais do Sistema”.

Exemplo: kill 500, kill -9 500, kill %1.

killall

Permite finalizar processos através do nome.

killall [opções] [sinal] [processo]

Onde:

processo

Nome do processo que deseja finalizar

sinal

Sinal que será enviado ao processo (pode ser obtido usando a opção -i).

opções, -i

Pede confirmação sobre a finalização do processo.

-l

Lista o nome de todos os sinais conhecidos.

-q

Ignora a existência do processo.

-v

Retorna se o sinal foi enviado com sucesso ao processo.

-w

Finaliza a execução do killall somente após finalizar todos os processos.

Os tipos de sinais aceitos pelo GNU/Linux são explicados em detalhes na “Sinais do Sistema”.

Exemplo: killall -HUP inetd

killall5

Envia um sinal de finalização para todos os processos sendo executados.

killall5 [sinal]

Sinais do Sistema

Retirado da página de manual signal. O GNU/Linux suporta os sinais listados abaixo. Alguns números de sinais são dependentes de arquitetura.

Primeiro, os sinais descritos no POSIX 1:

Sinal   Valor     Ação    Comentário
---------------------------------------------------------------------------
HUP        1        A      Travamento detectado no terminal de controle ou 
                           finalização do processo controlado
INT        2        A      Interrupção através do teclado
QUIT       3        C      Sair através do teclado
ILL        4        C      Instrução Ilegal
ABRT       6        C      Sinal de abortar enviado pela função abort
FPE        8        C      Exceção de ponto Flutuante
KILL       9       AEF     Sinal de destruição do processo
SEGV      11        C      Referência Inválida de memória
PIPE      13        A      Pipe Quebrado: escreveu para o pipe sem leitores
ALRM      14        A      Sinal do Temporizador da chamada do sistema alarm
TERM      15        A      Sinal de Término
USR1   30,10,16     A      Sinal definido pelo usuário 1
USR2   31,12,17     A      Sinal definido pelo usuário 2
CHLD   20,17,18     B      Processo filho parado ou terminado
CONT   19,18,25            Continuar a execução, se interrompido
STOP   17,19,23    DEF     Interromper processo
TSTP   18,20,24     D      Interromper digitação no terminal
TTIN   21,21,26     D      Entrada do terminal para o processo em segundo plano
TTOU   22,22,27     D      Saída do terminal para o processo em segundo plano

As letras da coluna Ação tem o seguinte significado:

  • A - A ação padrão é terminar o processo.

  • B - A ação padrão é ignorar o sinal.

  • C - A ação padrão é terminar o processo e mostrar o core.

  • D - A ação padrão é parar o processo.

  • E - O sinal não pode ser pego.

  • F - O sinal não pode ser ignorado.

Sinais não descritos no POSIX 1 mas descritos na SUSv2:

Sinal     Valor     Ação     Comentário
-------------------------------------------------------------------------
BUS      10,7,10      C      Erro no Barramento (acesso incorreto da memória)
POLL                  A      Evento executado em Pool (Sys V). Sinônimo de IO
PROF     27,27,29     A      Tempo expirado do Profiling
SYS      12,-,12      C      Argumento inválido para a rotina (SVID)
TRAP        5         C      Captura do traço/ponto de interrupção
URG      16,23,21     B      Condição Urgente no soquete (4.2 BSD)
VTALRM   26,26,28     A      Alarme virtual do relógio (4.2 BSD)
XCPU     24,24,30     C      Tempo limite da CPU excedido (4.2 BSD)
XFSZ     25,25,31     C      Limite do tamanho de arquivo excedido (4.2 BSD)

(Para os casos SIGSYS, SIGXCPU, SIGXFSZ, e em algumas arquiteturas também o SIGGUS, a ação padrão do Linux para kernels 2.3.27 e superiores é A (terminar), enquanto SYSv2 descreve C (terminar e mostrar dump core).) Seguem vários outros sinais:

Sinal     Valor     Ação     Comentário
--------------------------------------------------------------------
IOT         6         C      Traço IOT. Um sinônimo para ABRT
EMT       7,-,7
STKFLT    -,16,-      A      Falha na pilha do processador
IO       23,29,22     A      I/O agora possível (4.2 BSD)
CLD       -,-,18             Um sinônimo para CHLD
PWR      29,30,19     A      Falha de força (System V)
INFO      29,-,-             Um sinônimo para SIGPWR
LOST      -,-,-       A      Perda do bloqueio do arquivo
WINCH    28,28,20     B      Sinal de redimensionamento da Janela (4.3 BSD, Sun)
UNUSED    -,31,-      A      Sinal não usado (será SYS)

O "-" significa que o sinal não está presente. Onde três valores são listados, o primeiro é normalmente válido para o Alpha e Sparc, o do meio para i386, PowerPc e sh, o último para o Mips. O sinal 29 é SIGINFO/SIGPWR em um Alpha mas SIGLOST em um Sparc.