IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Linux Professional Institute Certificate. LPIC-1

Lpic1 large.gif
Certificat LPIC-1
Examen: 101 (torneu a la resta de temes)
Fitxers: LPI103.5_CrearmonitoritzarMatarProcessos.pdf (LPI103.5_CrearmonitoritzarMatarProcessos.odp) , UD_8_7_admin_processos.pdf
Objectius: http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_101_detailed_objectives
Dipòsit SVN: https://svn.projectes.lafarga.cat/svn/lpi/Materials/Examen_101/103.5
Usuari: anonymous
Paraula de pas: qualsevol paraula de pas

Objectius del tema

103.5. Crear, monitoritzar o matar processos
Objective.jpg
  • Objectiu: Els candidats han de ser capaços de gestionar els processos a un nivell bàsic.
  • Pes: 4
060317 Icon - Theory of Knowledge v01 pdc.jpg

Àrees Clau de Coneixement:

Icon list.jpg

La següent és una llista parcial de fitxers, termes i utilitats utilitzades:

Text-editor.svg

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
  • Característiques
  • 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
  • Elements més importants:
  • 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 ...
  • Prioritat del procés
  • 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

  • Unix/Linux
  • 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)
  • El procés init
  • é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

  • ps (process status)
  • 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
  • Dos processos:
  • 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. 
 
Jordiromerounix129.png

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)
  • Ens proporciona el PID
  • 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.
  • Senyals més freqüents
  • 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

  • Valors nice
  • 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
  • Renice
  • Permet modificar la pioritat d'un procés
  • Sintaxi:
$renice prioritat [ [-p pid ... ] [ [-g ] pgrp ... ] [ [-u ] user ... ]
  • On
  • 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
  • Capçalera
  • 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.
  • Mostrar colors: premeu z
  • Ajuda: premeu h
  • Manipular processos
  • 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