Comandos intermediários do GNU/Linux
Gerenciando os Processos
Introdução
ps aux
- D processo dormindo interruptamente (usually IO)
- R running ( na fila de processos)
- S dormindo interruptamente (aguardando um evento terminar)
- T parado, por um sinal de controle
- Z zombie, terminado mas removido por seu processo pai
- X processo morto
Junto a essas letras podemos encontrar outros caracteres cujos significados são:
- > o processo está rodando com prioridade maior que a padrão, tendo sido definida pelo kernel
- < o processo está rodando com prioridade menor que a padrão, tendo sido definida pelo kernel
- + o processo é um processo pai, ou seja, possui processos filhos
- s o processo é um session leader, ou seja, possui processos que dependem dele
- l o processo possui múltiplas threads
- L o processo possui páginas travadas na memória
- N o processo foi definido com uma prioridade diferente da padrão, tendo sido definida pelo usuário
a – mostra todos os processos existentes;
e – exibe as variáveis de ambiente relacionadas aos processos;
f – exibe a árvore de execução dos processos;
l – exibe mais campos no resultado;
m – mostra a quantidade de memória ocupada por cada processo;
u – exibe o nome do usuário que iniciou determinado processo e a hora em que isso ocorreu;
x – exibe os processos que não estão associados a terminais;
w – se o resultado de processo não couber em uma linha, essa opção faz com que o restante seja exibido na linha seguinte.
Das opções acima, a combinação mais usada é aux:
A seguir, segue a descrição dos campos mostrados anteriormente e alguns que só são mostrados com a combinação lax:
UID – número de identificação do usuário dono do processo;
PID – número de identificação do processo;
PPID – número de identificação do processo pai;
%CPU – porcentagem do processamento usado;
%MEM – porcentagem da memória usada;
VSZ – indica o tamanho virtual do processo;
RSS – sigla de Resident Set Size, indica a quantidade de memória usada (em KB);
TTY – indica o identificador do terminal do processo;
START – hora em que o processo foi iniciado;
TIME – tempo de processamento já consumido pelo processo;
COMMAND – nome do comando que executa aquele processo;
PRI – valor da prioridade do processo;
NI – valor preciso da prioridade (geralmente igual aos valores de PRI);
WCHAN – mostra a função do kernel onde o processo se encontra em modo suspenso;
STAT – indica o estado atual do processo, sendo representado por uma letra: R – executável; D – em espera no disco; S – Suspenso; T – interrompido; Z – Zumbi. Essas letras podem ser combinadas e ainda acrescidas de: W – processo paginado em disco; < – processo com prioridade maior que o convencional; N – processo com prioridade menor que o convencional; L – processo com alguns recursos bloqueados no kernel.
O comando ps trabalha como se tirasse uma fotografia da situação dos processos naquele momento. O comando top, por sua vez, coleta as informações, mas as atualiza regularmente. Geralmente essa atualização ocorre a cada 10 segundos.
A sintaxe do comando top é a seguinte:
Entre as opções, tem-se as que se seguem:
-d – atualiza o top após um determinado período de tempo (em segundos). Para isso, informe a quantidade de segundos após a letra d. Por exemplo: top -d 30;
-c – exibe a linha de comando ao invés do nome do processo;
-i – faz o top ignorar processos em estado zumbi;
-s – executa o top em modo seguro.
É possível manipular alguns recursos do comando top através das teclas do teclado. Por exemplo, para atualizar imediatamente o resultado exibido, basta pressionar a tecla de espaço. Se pressionar a tecla q, o top é finalizado. Pressione a tecla h enquanto estiver utilizando o top para ver a lista completa de opções e teclas de atalho.
Para ter ainda mais controle sobre os processos executados no Linux, pode-se utilizar os seguintes comandos: jobs, fg e bg, fuser, pstree, nohup, kill.
jobs – serve para visualizar os processos que estão parados ou executando em segundo plano (background). Quando um processo está nessa condição, significa sua execução é feita pelo kernel sem que esteja vinculada a um terminal. Em outras palavras, um processo em segundo plano é aquele que é executado enquanto o usuário faz outra coisa no sistema. Uma dica para saber se o processo está em background é verificar a existência do caractere & no final da linha. Se o processo estiver parado, geralmente a palavra “stopped” aparece na linha, do contrário, a palavra “running” é exibida. A sintaxe do jobs é:
-l – lista os processos através do PID;
-r – lista apenas os processos em execução;
-s – lista apenas os processos parados.
Se na linha de um processo aparecer o sinal positivo (+), significa que este é o processo mais recente a ser paralisado ou a estar em segundo plano. Se o sinal for negativo (-), o processo foi o penúltimo. Note também que no início da linha um número é mostrado entre colchetes. Muitos confundem esse valor com o PID do processo, mas, na verdade, trata-se do número de ordem usado pelo jobs.
fg e bg: Após iniciado um programa no shell, ele normalmente assumirá o controle de stdin(entrada) e stdout(saída), ou seja, usa-se a combinação de teclas [ctrl]+[Z]. Feito isso, para continuar a execução do programa em segundo plano, ou seja, mantendo o prompt do bash em primeiro plano, usa-se o comando bg (background). Para continuar a execução do programa em primeiro plano, usa-se o comando fg (foreground).
O número mencionado corresponde ao valor de ordem informado no início da linha quando o comando jobs é usado.
fuser: o comando fuser mostra qual processo faz uso de um determinado arquivo ou diretório. Sua sintaxe é:
fuser -opção caminho (do arquivo ou diretório)
-k – finaliza o processo que utiliza o arquivo/diretório em questão;
-i – deve ser usada em conjunto com a opção k e serve para perguntar se a finalização do processo deve ser feita;
-u – mostra o proprietário do processo;
-v – o resultado é mostrado em um padrão de exibição semelhante ao comando ps.
pstree: esse comando mostra processos relacionados em formato de árvore. Sua sintaxe é:
-u – mostra o proprietário do processo;
-p – exibe o PID após o nome do processo;
-c – mostra a relação de processos ativos;
-G – usa determinados caracteres para exibir o resultado em um formato gráfico.
Um detalhe importante: se ao digitar o comando pstree o PID não for informado, todos os processos serão listados.
nohup: o comando nohup possibilita ao processo ficar ativo mesmo quando o usuário faz logout. É da natureza dos sistemas baseados em Unix interromper processos caso seu proprietário não esteja mais ativo, por isso, o nohup pode ser muito útil. Sua sintaxe é:
# nohup comando
Introdução
Os sinais são identificados pelo sistema por um número inteiro. O arquivo /usr/include/signal.h contém a lista de sinais acessíveis ao usuário. Cada sinal é caracterizado por um neumônico. Os sinais mais usados nas aplicações em UNIX são listados a seguir:
kill [opções] [pid]
São algumas das opções deste comando
-l – lista os sinais que podem ser enviados a um processo junto com o comando kill.
-s sinal – especifica o sinal a ser enviado, onde sinal pode estar no formato texto ou no formato de número.
-sinal – especifica o sinal a ser enviado, onde sinal é um número.
Comentários sobre as opções do comando
Suponha que o resultado do comando ps seja como mostrado abaixo.
PID TTY TIME CMD 3284 pts/0 00:00:00 bash 1244 pts/0 00:00:00 teste
Neste exemplo temos dois processos sendo executados: bash e teste. Para finalizar o processo teste, basta digitar
kill 1314
O comando acima corresponde a enviar o sinal SIGTERM (ou 15) ao processo.
Caso o processo não seja encerrado, você pode forçar o término do processo com o seguinte comando
kill -9 1314
O comando acima corresponde a enviar o sinal SIGKILL ao processo. Esta opção informa ao sistema que o comando kill não pode ser ignorado, ele deve ser imediatamente processado. Neste caso, o sistema não se preocupa em salvar dados ou apagar arquivos temporários criados durante a execução do processo.
- SIGHUP (1) : reinicializa o processo (o processo ler novamente os seus arquivos de configuração).
- SIGKILL (9) : mata o processo.
- SGITERM (15) : terminal o processo caso não haja processos filhos.
- SIGCONT (18) : continua o processo parado.
- SIGSTP (20) : suspende a execução de um processo.
Lista dos nomes e números dos sinais
Use o comando kill -l para obter a lista dos sinais no Linux.
1) SIGHUP | 2) SIGINT | 3) SIGQUIT | 4) SIGILL |
5) SIGTRAP | 6) SIGABRT | 7) SIGBUS | 8) SIGFPE |
9) SIGKILL | 10) SIGUSR1 | 11) SIGSEGV | 12) SIGUSR2 |
13) SIGPIPE | 14) SIGALRM | 15) SIGTERM | 17) SIGCHLD |
18) SIGCONT | 19) SIGSTOP | 20) SIGTSTP | 21) SIGTTIN |
22) SIGTTOU | 23) SIGURG | 24) SIGXCPU | 25) SIGXFSZ |
26) SIGVTALRM | 27) SIGPROF | 28) SIGWINCH | 29) SIGIO |
30) SIGPWR | 31) SIGSYS | 32) SIGRTMIN | 33) SIGRTMIN+1 |
34) SIGRTMIN+2 | 35) SIGRTMIN+3 | 36) SIGRTMIN+4 | 37) SIGRTMIN+5 |
38) SIGRTMIN+6 | 39) SIGRTMIN+7 | 40) SIGRTMIN+8 | 41) SIGRTMIN+9 |
42) SIGRTMIN+10 | 43) SIGRTMIN+11 | 44) SIGRTMIN+12 | 45) SIGRTMIN+13 |
46) SIGRTMIN+14 | 47) SIGRTMIN+15 | 48) SIGRTMAX-15 | 49) SIGRTMAX-14 |
50) SIGRTMAX-13 | 51) SIGRTMAX-12 | 52) SIGRTMAX-11 | 53) SIGRTMAX-10 |
54) SIGRTMAX-9 | 55) SIGRTMAX-8 | 56) SIGRTMAX-7 | 57) SIGRTMAX-6 |
58) SIGRTMAX-5 | 59) SIGRTMAX-4 | 60) SIGRTMAX-3 | 61) SIGRTMAX-2 |
62) SIGRTMAX-1 | 63) SIGRTMAX |
Excelente artigo, muito claro e objetivo.
Parabéns
Parabéns,
Até +..
Att,