Listar e PIDs
Cada processo possui número único, o chamado PID. Uma lista de todos os processos em execução é exibido com o ps
.
# ps -auxefw # Lista extensiva de todos os processos em execução
Contudo o uso mais típico é com um pipe ou com pgrep
(para o OS X instale proctools
a partir do MacPorts):
# ps axww | grep cron 586 ?? Is 0:01.48 /usr/sbin/cron -s # ps axjf # Todos os processos em um formato de arvore (Linux) # ps aux | grep 'ss[h]' # Encontre todos os PIDs ssh sem o PID do grep # pgrep -l sshd # Encontre os PIDs dos processos por (parte do) nome # echo $$ # O PID do seu shell # fuser -va 22/tcp # Lista de processos utilizando a porta 22 (Linux) # pmap PID # Mapa de memória do processo (cace o vazamento de memória) (Linux) # fuser -va /home # Listar processos acessando a partição /home # strace df # Traçar chamadas e sinais do sistema # truss df # O mesmo acima no FreeBSD/Solaris/Unixware
Prioridade
Altere a prioridade de um processo em execução com o renice
. Números negativos tem uma prioridade mais alta, o mais baixo é -20 e “nice” tem um valor positivo.
# renice -5 586 # prioridade mais forte
586: old priority 0, new priority -5
Inicie o processo com uma prioridade definida com nice
. Positivo é “nice” ou fraco, negativo é prioridade de agendamento forte. certifique-se de que você sabe se /usr/bin/nice
ou o shell built-in é utilizado (verifique com o # which nice
).
# nice -n -5 top # prioridade mais forte (/usr/bin/nice) # nice -n 5 top # Prioridade mais fraca(/usr/bin/nice) # nice +5 top # tcsh builtin nice (o mesmo que acima!)
Enquanto nice altera o agendador do CPU (scheduler), um outro comando útil ionice
agendará o IO de disco. Isso é muito útil para aplicações intensivas de IO (entrada e saída)(exemplo: compilar). Você pode selecionar uma classe [inativo (idle) – melhor esforço (best effort) – tempo real (real time)], a página de manual (man page) é curta e bem explicada.
# ionice c3 -p123 # configura a classe inativa (idle class) para o pid 123 (somente em Linux) # ionice -c2 -n0 firefox # Roda o firefox com melhor empenho (best effort) e alta prioridade # ionice -c3 -p$$ # Configura a sheel atual para prioridade inativa
O último comando é muito útil para compilar (ou debugar) um grande projeto. Todo comando carregado a partir do shell terá uma prioridade lover. $$
é o seu pid shell (tente echo $$).
Os FreeBSD utilizam idprio/rtprio
(0 = max priority, 31 = most idle):
# idprio 31 make # compila em baixa prioridade # idprio 31 -1234 # configura o PID 1234 com baixa prioridade # idprio -t -1234 # -t remove qualquer real time/idle priority
Plano de fundo ou plano frontal (Background/Foreground)
Quando iniciado a partir de um shell, processos podem ser trazidos em plano de fundo (background) e de volta para o plano frontal (foreground) com [Ctrl]-[Z] (^Z), bg
e fg
. Listar os processos com o jobs
. Quando necessário destaca a partir de um terminal com o disown
.
# ping cb.vu > ping.log ^Z # ping está suspense (parado) com o [Ctrl]-[Z] # bg # Coloca em plano de fundo e continua rodando # jobs -l # Lista processos em plano de fundo [1] - 36232 Running ping cb.vu > ping.log [2] + 36233 Suspended (tty output) top # fg %2 # Traz processo 2 de volta para plano frontal
# make # Inicia um serviço longo de compilação mas necessita deixar o terminal ^Z # suspenso (stopped) com [Ctrl]-[Z] # bg # Coloca em plano de fundo e continua rodando # disown -h %1 # destaca processo a partir do terminal, não será morto no logout
Sem caminho a frente para reanexar o processo para um novo terminal, tente reptyr (Linux).
Utilize nohup
para iniciar um processo na qual tem que continuar executando quando o shell for fechado (imune a hangups).
# nohup ping -i 60 > ping.log &
Top
O programa top
exibe informações de processos em execução. Veja também o programa htop
a partir de htop.sourceforge.net (uma versão mais poderosa do top) que roda em Linux e em FreeBSD (ports/sysutils/htop/
). Enquanto o top estiver rodando pressione a tecla h para uam visão global de ajuda (help). Teclas úteis são:
- u [user name] para exibir somente os processos pertinentes ao usuário. Utilize + ou em barco para ver todos os usuários
- k [pid] Matar os processos com o pid.
- 1 para exibir todas as estatísticas dos processadores (somente em Linux)
- R Alterna o tipo de normal/reversa.
Sigais/Kill
Termina ou envia um sinal com kill
ou killall
.
# ping -i 60 cb.vu > ping.log & [1] 4712 # kill -s TERM 4712 # O mesmo que kill -15 4712 # killall -1 httpd # Kill HUP nos processos por nome exato # pkill -9 http # Kill TERM nos processos por (parte do) nome # pkill -TERM -u www # Kill TERM nos processos possuídos por www # fuser -k -TERM -m /home # mata todos os processos acessando /home (para desmontar)
Sinais importantes são:
- 1
HUP
(hang up) - 2
INT
(interrupt) - 3
QUIT
(quit) - 9
KILL
(non-catchable, non-ignorable kill) - 15
TERM
(software termination signal)