Objectius del tema
103.5. Crear, monitoritzar o matar processos
|
|
- Objectiu: Els candidats han de ser capaços de gestionar els processos a un nivell bàsic.
- Pes: 4
|
|
Àrees Clau de Coneixement:
|
|
La següent és una llista parcial de fitxers, termes i utilitats utilitzades:
|
|
Apunts: LPI 103.5. Crear, monitoritzar o matar processos
|
Definició de procés
és una instància d'una aplicació que està sent executada per un ordinador
- una aplicació o programa es solament una col·lecció passiva d'instruccions que no esdevenen un procés fins que el programa es executat
- Una sola aplicació pot executar múltiples processos al mateix temps
- el procés es mou des de la memòria fins a la cpu
- linux és un sistema operatiu multi-tasca i multi-procés pot executar diferents processos al mateix temps
- el sistema operatiu gestiona els processos
- és possible llançar varies instàncies d'un mateix programa simultàniament
Elements d'un procés
- Procés = estructura de dades del SO
- Contenen meta informació sobre programes que està executant el sistema operatiu
- Identificador de procés (PID), identifica el procés de manera única correspon a un numero enter,
- Identificador del procés pare (PPID) tot procés té un pare, normalment quan el procés pare acaba, també finalitzen tots els seus processos fills
- Estat del procés poden ser actius que està treballant, dormit esperant per a executar-se ...
- Senyals pendents de ser processades la manera de comunicar-se el processos, una de les importants és la de parar el procés, kill fa que el procés es finalitze inmediatament
L'identificador de procés (PID) i l'identificador de procés pare
- Tot procés s'identifica amb un número únic PID
- L'encarregat de gestionar els processos és el kernel i disposa d'una taula de processos on cada procés es identificat pel seu PID
- Una aplicació no pot crear un procés directament, el sistema operatiu es el que crea el procés, es disposa de dos crides del sistema
- fork permet que un procés crei un altre procés
- exec permet executar una aplicació externa substitueix el procés en execució per un altre
Tipus de processos
- Procés fill jerarquia de processos, creats per fork
- Procés orfe el pare finalitza abans que el fill
- Procés zombie procés que ha acabat però que resta a l'espera d'una resposta del pare
- Procés parat es poden parar processos, pausa (Ctrl+z)
- Procés dimoni (servei) s'executa permanentment i en segon terme. No té interfícies d'usuari associades
Fils d'execució vs processos
Jerarquia de processos Unix. L’arbre de processos
- els processos només és poden executar a partir de processos ja existents
- el processos acabin tenint una jerarquia
- La crida de sistema permet en Unix crear un nou procés és fork. Fork crea un procés fill que és una copia exacta
El nucli del sistema operatiu. scheduler
El procés init
- el primer procés es el nucli del sistema operatiu (kernel)
- s'executa el gestor d'arrancada
- El procés del nucli que gestiona tota la resta de processos s'anomena scheduler (planificador de processos). No el podeu visualitzar (té el PID 0)
- és el procés pare de tota la resta de processos PID 1
Vegeu l'ordre pstree
[email protected]:~$ pstree -p |head
init(1)-+-NetworkManager(670)-+-dhclient(1374)
| |-{NetworkManager}(683)
| `-{NetworkManager}(1375)
|-accounts-daemon(1030)---{accounts-daemo}(1031)
|-acpid(961)
|-apache2(1142)-+-apache2(3652)
| |-apache2(3653)
| |-apache2(3654)
| |-apache2(3655)
| `-apache2(3656)
- l'opció -p mostra el PID del procés
- l'ordre head permet visualitzar el principi d'un fitxer o flux de dades
Exemple per visualitzar la jerarquia de processos Linux
Estat dels processos
Vegeu l'ordre ps
- Permet consultar la taula de processos
- Diferents implementacions de l'ordre ps. Difereixen sobretot en la forma d'utilitzar les opcions:
- Opcions UNIX: les opcions han d'estar totes agrupades i han d'estar precedides per un guió (-)
- Opcions BSD: poden estar agrupades i no utilitzen mai el guió (-).
- Opcions llargues de GNU: precedides per dos guions (--)
- Processos associats a la terminal i l'usuari
[email protected]:~$ ps
PID TTY TIME CMD
19000 pts/0 00:00:00 bash
19087 pts/0 00:00:00 ps
- L'interpret d'ordres en si (bash) (PID 19000)
- El propi procés de l'ordre ps (PID 19087)
- TTY (terminal associada): on s'ha executat ps
- TIME Temps acumulat d'ús de CPU
- CMD la comanda que ha generat el procés
- EUID Effective User Identifier. Variable d'entorn
[email protected]:~$ echo $EUID
1000
- Mostrar tots els processos
- ps aux mostra tots els processos del sistema
[email protected]:~$ ps aux |more
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 3332 1948 ? Ss 11:41 0:00 /sbin/init
root 2 0.0 0.0 0 0 ? S 11:41 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 11:41 0:00 [ksoftirqd/0]
root 6 0.0 0.0 0 0 ? S 11:41 0:00 [migration/0]
root 7 0.0 0.0 0 0 ? S 11:41 0:00 [migration/1]
root 9 0.0 0.0 0 0 ? S 11:41 0:00 [ksoftirqd/1]
root 10 0.0 0.0 0 0 ? S 11:41 0:00 [kworker/0:1]
root 11 0.0 0.0 0 0 ? S< 11:41 0:00 [cpuset]
root 12 0.0 0.0 0 0 ? S< 11:41 0:00 [khelper]
root 13 0.0 0.0 0 0 ? S< 11:41 0:00 [netns]
root 15 0.0 0.0 0 0 ? S 11:41 0:00 [sync_supers]
root 16 0.0 0.0 0 0 ? S 11:41 0:00 [bdi-default]
root 17 0.0 0.0 0 0 ? S< 11:41 0:00 [kintegrityd]
root 18 0.0 0.0 0 0 ? S< 11:41 0:00 [kblockd]
root 19 0.0 0.0 0 0 ? S< 11:41 0:00 [ata_sff]
...
- ps aux| grep bash utilitzarem el grep per mirar un procés en concret per saber quin és l'identificador del procés
[email protected]:~$ ps aux |grep bash
alumne 2098 0.0 0.1 8848 4024 pts/0 Ss 11:49 0:00 bash
alumne 2182 0.0 0.0 5436 764 pts/0 S+ 12:07 0:00 grep --color=auto bash
- Mostrar la taula de processos
- Username (USER): el nom de l'usuari que executa el programa
- Process ID (PID): l'identificador de procés.
- Parent PID (PPID): El PID del procés pare.
- UID: l'identificador de l’usuari sota el qual s’executa el procés.
- GID: l'identificador del grup (Group IDentifier) que executa el procés
- COMMAND: mostra l'ordre que ha generat aquest procés.
- STAT: mostra l'estat del procés.
- Teletype (TTY o TT): el codi que identifica la terminal on s'està executant el procés. Els dimonis (serveis Linux), són processos especials que no tenen cap terminal associada ( “?”)
- TIME: indica el total de temps acumulat de CPU
- %CPU: és (o era) el tant per cent de CPU ocupada pel procés en el moment que vam executar ps
- NI: el codi de nivell de prioritat del procés.
- Memòria: Hi ha múltiples capçaleres relacionades amb la memòria.
- RSS(Resident Set Size): memòria utilitzada pel procés i les seves
dades.
- %MEM: és el percentatge de memòria que el programa està (o millor dit
estava) consumint durant l'execució de ps
- SHARE: Memòria compartida amb altres processos (com p. ex. biblioteques compartides)
- START o STIME: Mostra la data d'execució del procés.
Estat dels processos
- Model de 7 estats (amb paginació)
R “Running”. Procés en curs d’execució (l'està utilitzant la CPU)
T "sTopped". Procés esta parat (amb les tecles Ctrl+Z per exemple)
S "Sleeping" Procés dormit en espera al processador.
D "Device" Procés dormit en espera d'un recurs (generalment entrada/sortida). Els processos en aquest estat no poden interrompre's.
Z "Zombie" Procés terminat. Seguirà en aquest estat fins que el seu pare ho noti i recuperi el seu codi de retorn.
Manipulació de processos
- Crear processos. 2 tipus:
- Primer pla (foreground - fg) és el mode per defecte amb el qual executem ordres a l'interpret d'ordres. les ordres bloquegen l'execució del interpret
$sleep 10
- Segon pla (background - bg): es pot fer amb el símbol & (o l'ordre bg)
- Es per poder gestionar el procés
[email protected]:~$ sleep 10 &
[1] 19053
Com crear processos
Executar processos en primer terme
Executar processos en segon terme
Substituir un programa en execució per un altre. Comanda exec
Control de tasques en un interpret d'ordres
- Ordres built-in de bash per gestionar processos
- jobs: mostra els processos que s'estan executant a l'interpret
- fg: passa un procés de segon terme a primer terme
- bg: passa un procés de primer terme a segon terme
- Aquestes ordres formen part de bash (com p. ex. l'ordre cd)
Acabar un procés.
Consulteu també l'ordre kill.
Informació sobre processos: ps i pstree
ps
pstree
- Permet visualitzar la jerarquia de processos
Senyals
- Mecanisme Bàsic de comunicació entre processos
- Mecanisme IPC (Inter-Process Communication) proporcionat pel sistema operatiu.
- Hi ha 64 senyals que s'identifiquen per un número o un nom simbòlic (SIG+Nom_del_senyal)
- Cada procés pot programar l'acció que durà a terme per a cada senyal, excepte 2 senyals:
- SIGKILL(9): permet finalitzar un procés de forma abrupta
- SIGSTOP(19): permet aturar temporalment un procés.
- INT (2): Interrupt. Es enviada quan polsem CTRL+c. Els programes poden ignorar la senyal, simplement sortir o realitzar tasques abans d'aturar-se
- KILL (9): elimina el procés immediatament i incondicionalment.
- TERM (15): Terminate. Finalitza el procés de forma controlada (si està implementada la senyal)
- TSTOP (19): Para l’execució temporalment (Ctrl+z). Es pot tornar a executar l'aplicació, per exemple amb les ordres fg o bg o la senyal CONT(18)
- Per llistar el numero de senyal que volem enviar o farem amb:
$kill -l
[email protected]:~$ kill -l
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
16) SIGSTKFLT 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 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Enviant senyals a processos : kill, killall i top
* 9.2 kill, killall
o 9.2.1 xkill
* 9.3 top
* 9.4 Alternatives a top
o 9.4.1 htop
o 9.4.2 atop
Prioritat dels processos
- Indiquen la prioritat d'un procés. Rang: -20 a 20
- Valor més alt de prioritat és -20 (màxima prioritat)
- Valor més baix de prioritat és 20 (mínima prioritat).
- La prioritat per defecte és 0
- Els processos amb més prioritats utilitzen més recursos. Els processos amb prioritat mínima (+20), només s’executaran quan el sistema no executa cap altra tasca.
- Els usuaris, només poden modificar els processos dels quals són propietaris en un interval de 0 a 20.
- L’usuari root, pot canviar la prioritat de qualsevol procés a qualsevol valor.
- Permet executar un procés amb una prioritat concreta
$nice -n 19 dd if=/dev/cdrom of=~/mdk1.iso
- Per defecte defineix una prioritat de 10
- L'opció –n servei per establir un valor de prioritat.
- L'anterior ordre no satura gens el sistema
- Permet modificar la pioritat d'un procés
$renice prioritat [ [-p pid ... ] [ [-g ] pgrp ... ] [ [-u ] user ... ]
- prioritat: és el valor de la prioritat assignada al procés
- pid: és l’identificador del procés (si volem actuar sobre més
d’un procés, hem d’escriure la opció –p)
- pgrp: és l’identificador del grup de proces (hem d'utilitzar la
opció –g si n’hi ha més d’un).
- user: nom d’usuari del propietari del procés (utilitzem –u si
volem actuar sobre més d’un).
Exemples
Executar un programa abans de l'execució de cada comanda (execució de l'interpret d'ordres)
Ordres
ps
top
- Mostra els processos ordenats per percentatge d'ús de la CPU (de més a menys) i de forma continuada.
[email protected]:~$ top
top - 12:45:16 up 1:03, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 158 total, 1 running, 157 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.3%us, 0.7%sy, 0.0%ni, 97.7%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2967508k total, 1155140k used, 1812368k free, 94144k buffers
Swap: 581628k total, 0k used, 581628k free, 625276k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1536 alumne 20 0 252m 68m 29m S 3 2.4 1:14.69 compiz
1061 root 20 0 80428 42m 8384 S 3 1.5 1:11.81 Xorg
2509 alumne 20 0 149m 14m 10m S 2 0.5 0:00.43 gnome- terminal
1607 alumne 20 0 202m 39m 16m S 0 1.4 0:06.40 dropbox
2502 root 20 0 0 0 0 S 0 0.0 0:00.03 kworker/0:2
2574 alumne 20 0 2828 1160 856 R 0 0.0 0:00.04 top
1 root 20 0 3332 1948 1268 S 0 0.1 0:00.69 init
2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0 0.0 0:00.44 ksoftirqd/0
6 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/0
7 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/1
9 root 20 0 0 0 0 S 0 0.0 0:00.15 ksoftirqd/1
11 root 0 -20 0 0 0 S 0 0.0 0:00.00 cpuset
12 root 0 -20 0 0 0 S 0 0.0 0:00.00 khelper
13 root 0 -20 0 0 0 S 0 0.0 0:00.00 netns
15 root 20 0 0 0 0 S 0 0.0 0:00.00 sync_supers
16 root 20 0 0 0 0 S 0 0.0 0:00.00 bdi-default
- up: és la quantitat de temps que porta encesa la màquina.
- users: nombre d'usuaris diferents (inclou un mateix usuari que estigui "logat" en diferents terminals )
- load average: Càrrega mitjana del sistema (tots els valors respecte 1)
- Tasks: estadístiques de les tasques.
- Cpu(s): estadístiques de la CPU.
- Mem: estadístiques de la memòria del sistema
- Swap: Estadístiques de la memòria swap.
- Matar un procés: prémer k i indicar el PID del procés
- Canviar la prioritat d'un procés: prémer r i indicar el PID
- Canviar les columnes de sortida:
- f: permet afegir/treure columnes
- o: permet canviar l'ordre
- u: mostrar només les tasques d'un usuari
- n: limitar el nombre de processos a mostrar
- i: mostrar només el processos actius
kill
killall
pidof
htop
atop
jobs
bg
fg
nohup
- Executa una comanda immune als hangups
- Evita que un procés engegat en una terminal especifica s'aturi al finalitzar la terminal. El nou procés no té cap relació amb la terminal. L'ordre és una ordre built-in de bash.
- Per comprovar-ho, executeu dos terminals. En una executeu:
[email protected]:~$ sleep 10000
- Comproveu a l'altre terminal que el procés sleep s'està executant amb:
[email protected]:~$ ps aux | grep sleep
alumne 5480 0.0 0.0 5236 248 pts/0 S+ 11:43 0:00 sleep 10000
alumne 5483 0.0 0.0 5436 764 pts/1 D+ 11:43 0:00 grep --color=auto sleep
- Tanqueu la terminal on heu executat sleep 10000.
time
- Conèixer el temps que triga en executar-se un ordre
$time ls -la
[email protected]:~$ time ls -la
total 392
drwxr-xr-x 52 alumne alumne 4096 2012-04-16 10:57 .
drwxr-xr-x 4 root root 4096 2012-01-12 09:25 ..
-rw------- 1 alumne alumne 322 2012-03-30 11:53 2012-03-30-11-53-08.080- VirtualBox-3291.log
drwx------ 3 alumne alumne 4096 2011-12-21 10:45 .adobe
drwxr-xr-x 2 alumne alumne 4096 2012-03-26 08:15 Baixades
-rw------- 1 alumne alumne 6597 2012-04-16 11:45 .bash_history
-rw-r--r-- 1 alumne alumne 220 2011-12-21 07:42 .bash_logout
-rw-r--r-- 1 alumne alumne 3353 2011-12-21 07:42 .bashrc
drwxr-xr-x 3 alumne alumne 4096 2012-03-12 07:47 .bluefish
drwx------ 6 alumne alumne 4096 2012-04-16 09:47 .cache
...
real 0m0.073s
user 0m0.004s
sys 0m0.000s
- Temps total d'execució: també conegut com a temps real.
- Temps d'ús de la CPU d'usuari: temps d'execució de la comanda en espai d'usuari.
- Temps d'ús de la CPU de sistema: temps d'execució de la comanda en espai de sistema.
lsof
- Mostra els fitxers oberts d'un sistema. Els podem mostrar tots amb:
$sudo lsof | more
free
uptime
watch
Variables de shell i d'entorn
$$
$?
$PPID