103.5 Criar Monitorar e Matar Processos
- Ter a capacidade de realizar gerenciamento de básico de processos;
- Executar processos em
foreground
ebackground
; - Fazer com que um programa continue sua execução mesmo após o logoff do usuário que executou o mesmo;
- Monitorar processos ativos;
- Selecionae e ordenar procesos para a visualização;
- Enviar sinais para processos;
&
Ao executar um comando colocamos um &
no final do comando para deixar o mesmo em background
. Abaixo podemos observar que o comando ping
esta sendo executado em background
, porém o output do comando continua saindo para para o terminal. O que de certa forma pode prejudicar o usuário em digitar outros comandos, já que a intenção é mandar um determinado comando para ser execudo em background e ficar com o bash
livre para a execução de outros comandos.
ping 127.0.0.1 &
[1] 4364
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.053 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.054 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.067 ms
Para contornar essa situação podemos colocar todas as saídas para o /dev/null
e assim o terminal fica livre.
ping 127.0.0.1 &> /dev/null &
[1] 4364
jobs
Comando jobs
exibe todos os comando em execução em background:
jobs
[1]- Executando ping 8.8.8.8 &> /dev/null &
[2]+ Executando ping 127.0.0.1 &> /dev/null &
Com a opção -l
são exibidos os PIDS dos processos.
jobs -l
[1]- 6005 Executando ping 127.0.0.1 &> /dev/null &
[2]+ 6007 Executando ping 8.8.8.8 &> /dev/null &
bg
O comando bg joga um comando para background. Ao executar o comando gnome-calculator
o mesmo fica ocupando a sessão do terminal impedindo a execução de outros comandos. Mas podemos fazer a uma pausa em sua execução utilizando as teclas CTRL+Z
, dessa forma o comando será STOPED
como podemos ver abaixo:
gnome-calulator
^Z
[3]+ Parado gnome-calculator
Podemos observar que o mesmo esta parado
jobs -l
[1] 6005 Executando ping 127.0.0.1 &> /dev/null &
[2]- 6007 Executando ping 8.8.8.8 &> /dev/null &
[3]+ 6855 Parado gnome-calculator
Executando o comando bg
o mesmo é jogado em background e sua execução é continuada.
bg
Nesse caso podemos utilizar o bg +
ou ate mesmo o bg 3
, como no fg.
fg
O comando fg
pega um comando que esta em background e joga o mesmo para o foreground.
jobs
[1]- Executando ping 8.8.8.8 &> /dev/null & [2]+ Executando ping 127.0.0.1 &> /dev/null &fg %1
ping 8.8.8.8 &> /dev/null
O sinal de %
pode ser omitido docomando bg.
jobs
[1]- Executando ping 8.8.8.8 &> /dev/null & [2]+ Executando ping 127.0.0.1 &> /dev/null &fg 1
ping 8.8.8.8 &> /dev/null
Podemos também chamar um determinado comando usando o sinal de +
ou -
. Dessa forma com o +
:
fg +
ping 127.0.0.1 &> /dev/null
Com o -
:
fg -
ping 8.8.8.8 &> /dev/null
kill
nohup
O comando nohup
ignora o sinal de HUP
(hang up), fazendo com que seja possivel executar comandos em background ate mesmo se o terminal acabar, no caso um logoff.
O comando abaixo vai continuar em execução mesmo que o terminal seja fechado ou o usuário faça logoff.
nohup ping 127.0.0.1 &> /dev/null &
[1] 4364
ps
Exibe informações sobre processos em execução. o ps pode trabalha com 3 tipos de parametros:
- Unix98, precedidos de um
-
e uma letra; - BSD, composto apenas por letras;
- GNU Long Options, precedido com
--
e palavras;
O ps
possui muitos parametros. Os principais cobrados na LPI são:
u
Com esse parametro o ps exibe as informações em modo usuário. Mostrando mais dados no output. Veja abaixo o comando ps sem parametros
ps
PID TTY TIME CMD
3553 pts/2 00:00:00 zsh
9808 pts/2 00:00:00 ps
Agora com o parametro u
ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
alphabr+ 3553 0.0 0.0 47816 7032 pts/2 Ss 08:26 0:00 zsh
alphabr+ 9879 0.0 0.0 37368 3244 pts/2 R+ 10:00 0:00 ps u
Com o parametro u
são exibidos o nome do usuario, memoria etc…
x
Exibe processos que não foram inicialiados pelo seu tty ou seja mais informações são exibidas.
ps ux
alphabr+ 1844 0.0 0.0 45276 4560 ? Ss May25 0:00 /lib/systemd/systemd --user
alphabr+ 1845 0.0 0.0 245868 2656 ? S May25 0:00 (sd-pam)
alphabr+ 1851 0.0 0.1 285192 13532 ? SLl May25 0:09 /usr/bin/gnome-keyring-daemon --daemonize --login
alphabr+ 1857 0.0 0.2 419148 23680 ? Ssl May25 0:00 mate-session
alphabr+ 1990 0.0 0.0 11136 312 ? Ss May25 0:00 /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session /usr/bin/im-launch mate-session
alphabr+ 1993 0.0 0.0 43600 2568 ? S May25 0:00 /usr/bin/dbus-launch --exit-with-session /usr/bin/im-launch mate-session
alphabr+ 1994 0.0 0.0 43744 4064 ? Ss May25 0:03 /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
Veja a coluna 7. Ela só tem a informação ?
isso quer diser que os processos listados não foram originados do meu tty.
a
Com o parametro a
os processos de todos os usuário são listados. Veja abaixo:
ps uxa
root 465 0.0 0.0 0 0 ? S< May25 0:00 [loop3]
root 477 0.0 0.0 0 0 ? S< May25 0:00 [loop4]
root 480 0.0 0.0 0 0 ? S< May25 0:00 [loop5]
www-data 492 0.0 0.3 489340 31904 ? S 07:35 0:00 /usr/sbin/apache2 -k start
www-data 493 0.0 0.3 488788 27992 ? S 07:35 0:00 /usr/sbin/apache2 -k start
www-data 494 0.0 0.3 415712 31068 ? S 07:35 0:00 /usr/sbin/apache2 -k start
www-data 495 0.0 0.3 411268 25744 ? S 07:35 0:00 /usr/sbin/apache2 -k start
www-data 496 0.0 0.1 410448 12424 ? S 07:35 0:00 /usr/sbin/apache2 -k start
root 523 0.0 0.1 95392 9668 ? Ss 07:35 0:00 /usr/sbin/cupsd -l
root 524 0.0 0.1 274960 9784 ? Ssl 07:35 0:00 /usr/sbin/cups-browsed
root 546 0.0 0.0 0 0 ? S May25 0:00 [irq/129-mei_me]
root 553 0.0 0.0 0 0 ? S< May25 0:00 [cfg80211]
root 622 0.0 0.0 0 0 ? S May25 0:27 [irq/130-iwlwifi]
root 706 0.0 0.0 0 0 ? S< May25 0:00 [kworker/u17:0]
root 814 0.0 0.0 0 0 ? S< May25 0:00 [hci0]
root 815 0.0 0.0 0 0 ? S< May25 0:00 [hci0]
root 816 0.0 0.0 0 0 ? S< May25 0:00 [kworker/u17:2]
root 1102 0.0 0.0 29012 2988 ? Ss May25 0:00 /usr/sbin/cron -f
avahi 1111 0.0 0.0 45428 4092 ? Ss May25 0:01 avahi-daemon: running [helix.local]
-C
Podemos ainda usar o parametro -C que lista os processos pelo nome. Veja o exemplo abaixo:
ps u -C chrome
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
alphabr+ 5857 2.5 3.3 1298572 272384 ? SLl 08:40 3:06 /opt/google/chrome/chrome
alphabr+ 5868 0.0 0.6 419828 56000 ? S 08:40 0:00 /opt/google/chrome/chrome --type=zygote
alphabr+ 5872 0.0 0.1 419828 14104 ? S 08:40 0:00 /opt/google/chrome/chrome --type=zygote
alphabr+ 5924 2.2 1.8 589204 145444 ? Sl 08:40 2:44 /opt/google/chrome/chrome --type=gpu-process --field-trial-handle=1849731511986804062,1867325293027947282,13
alphabr+ 5927 0.0 0.1 449400 14296 ? S 08:40 0:00 /opt/google/chrome/chrome --type=-broker
top
Exibe informações sobre processos em execução.
free
Exibe informações sobre a memória volátil do sistema.
uptime
O comando uptime
informa quanto tempo a máquina esta ligada.
uptime --help
Usage:
uptime [options]
Options:
-p, --pretty show uptime in pretty format
-h, --help display this help and exit
-s, --since system up since
-V, --version output version information and exit
For more details see uptime(1).
Sem argumentos:
uptime
11:06:53 up 1 day, 2:41, 1 user, load average: 0,07, 0,11, 0,09
COm o output mais bonito.
uptime -p
up 1 day, 2 hours, 42 minutes
Ligado desde:
uptime -s
2018-04-09 08:25:03
Para ver a versão do comando:
uptime -V
uptime from procps-ng 3.3.10
pgrep
Esse comando retorna informações a respeito de processos. Recebendo pro padrão uma string para o grep
No exemplo abaixo são retornados os PIDS dos procesos q tem chrome no nome:
psgrep chrome
5857
5868
5872
5924
5927
Com o parametro -l mais delalhes são exibidos:
psgrep -l chrome
5857 chrome
5868 chrome
5872 chrome
5924 chrome
5927 chrome
6004 chrome
6099 chrome
6679 chrome
7399 chrome
11441 chrome
11466 chrome
11491 chrome
11591 chrome
11730 chrome
pkill
killall
screen
Tabela de sinais
Signal | Name | Description |
---|---|---|
SIGHUP | 1 | Hangup (POSIX) |
SIGINT | 2 | Terminal interrupt (ANSI) |
SIGQUIT | 3 | Terminal quit (POSIX) |
SIGILL | 4 | Illegal instruction (ANSI) |
SIGTRAP | 5 | Trace trap (POSIX) |
SIGIOT | 6 | IOT Trap (4.2 BSD) |
SIGBUS | 7 | BUS error (4.2 BSD) |
SIGFPE | 8 | Floating point exception (ANSI) |
SIGKILL | 9 | Kill(can't be caught or ignored) (POSIX) |
SIGUSR1 | 10 | User defined signal 1 (POSIX) |
SIGSEGV | 11 | Invalid memory segment access (ANSI) |
SIGUSR2 | 12 | User defined signal 2 (POSIX) |
SIGPIPE | 13 | Write on a pipe with no reader, Broken pipe (POSIX) |
SIGALRM | 14 | Alarm clock (POSIX) |
SIGTERM | 15 | Termination (ANSI) |
SIGSTKFLT | 16 | Stack fault |
SIGCHLD | 17 | Child process has stopped or exited, changed (POSIX) |
SIGCONTv | 18 | Continue executing, if stopped (POSIX) |
SIGSTOP | 19 | Stop executing(can't be caught or ignored) (POSIX) |
SIGTSTP | 20 | Terminal stop signal (POSIX) |
SIGTTIN | 21 | Background process trying to read, from TTY (POSIX) |
SIGTTOU | 22 | Background process trying to write, to TTY (POSIX) |
SIGURG | 23 | Urgent condition on socket (4.2 BSD) |
SIGXCPU | 24 | CPU limit exceeded (4.2 BSD) |
SIGXFSZ | 25 | File size limit exceeded (4.2 BSD) |
SIGVTALRM | 26 | Virtual alarm clock (4.2 BSD) |
SIGPROF | 27 | Profiling alarm clock (4.2 BSD) |
SIGWINCH | 28 | Window size change (4.3 BSD, Sun) |
SIGIO | 29 | I/O now possible (4.2 BSD) |
SIGPWR | 30 | Power failure restart (System V) |