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

NOTA: En informàtica un procés és una instància d'una aplicació que esta essent executada per una computadora

Característiques

Una aplicació o programa és solament una col·lecció passiva d'instruccions que no esdevenen un procés fins que el programa és executat.

Una sola aplicació o programa pot arribar a executar múltiples processos al mateix temps.

El S.O. és el que els executa.

Linux és un sistema operatiu multitasca i també multi-proces (suport per a múltiples CPUs) i pot executar diferents processos al mateix temps.

La diferència entre multitasca i multi-proces és que multitasca vol dir que pot executar més d'una tasca a la vegada en canvi multi-proces és que pot repartir les tasques entre diferents CPUs.

És possible llançar vàries instàncies d’un mateix programa simultàniament.

Elements d'un procés

Un procés no és res més que una estructura de dades.

Contenen (meta)informació sobre els programes que està executant el sistema operatiu.

Elements (dades) més importants:

  • Identificador del procés (PID).
  • Identificador del procés pare (PPID).
  • Estat del procés.
  • Prioritat del procés.
  • Senyals pendents de ser processades.

L'identificador de procés (PID) i l'identificador de procés pare

Tot procés s’identifica amb un número únic, el 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!!. Es necessari demanar al sistema operatiu que crei el procés i el gestioni. Es disposa de dos crides de sistema:

  • fork: permet que un procés crei un altre procés. Aquest nou procés es anomenat procés fill. Això passa quan executem una aplicació per linia de comandes, quan tanquem la terminal es tanca el programa.
  • exec: permet executar una aplicació externa. Substitueix el procés en execució per un altre procés. No confondre amb l'ordre exec.

Tipus de processos

Procés fill: Jerarquia de processos. Creats per fork.

Procés orfe: el pare ha finalitzat la seva execució 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 es poden executar a partir de processos ja existents

Els processos acabin tenint una jerarquia (relacions pare/fill).

La crida de sistema que permet en Unix crear un nou procés és fork (forquilla). Fork crea un procés fill que és una còpia casiexacte del procés pare i que s'executa en paral·lel al procés pare.

Dos conceptes:

Herència:' El procés hereta totes les propietats del pare (de fet és una còpia exacte del seu pare).

Sincronització entre processos pare i fill: Mecanismes IPC com senyals

El nucli del sistema operatiu. scheduler

El primer procés en executar-se és el nucli (kernel)

És executat pel 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

$ pstree -p |head
init(1)-+-/usr/bin/termin(2398)-+-/usr/bin/termin(2402)
        |                       |-bash(2403)-+-bash(2457)
        |                       |            `-pstree(2456)
        |                       `-{/usr/bin/termi}(2404)
        |-NetworkManager(747)-+-dhclient(1439)
        |                     |-{NetworkManager}(767)
        |                     `-{NetworkManager}(1440)
        |-accounts-daemon(1198)---{accounts-daemo}(1209)
        |-acpid(963)
        |-acroread(2176)---{acroread}(2212)

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

Una altra manera de mirar un arbre és ps aux --forest

O també amb la comanda:

$ gnome-system-monitor

Hugolucas processos.jpeg

Opcions del monitor de procressos:

(Fem click amb el botó dret damunt un procés)

  • Atura el procés
  • Continua el procés
  • Finalitza el procés
  • Mata el procés
  • Canvia la prioritat
  • Mapes de memòria
  • Fitxers oberts

Estat dels processos

Vegeu l'ordre ps

Manipulació de processos

Com crear processos

Hi ha dues maneres de crear processos:

Executar processos en primer terme

Em primer pla (foreground – fg): és el mode per defecte amb el qual executem ordres a l'interpret d'ordres. Les ordres bloquegen l'execució de l'interpret.

$ sleep 10 
$ evince fitxerPDF.pdf 
$ ooimpress Transpas.odp

Executar processos en segon terme

Segon pla (background – bg): es pot fer amb el símbol & (o l'ordre bg).

$ sleep 10 &
[1] 2593
  • Ens proporciona el PID:
  • Es per poder gestionar el procés
  • p. ex. Matar el procés amb kill

Acabar (terminar) un procés

Hi ha 3 maneres d'acabar prematurament un procés que s'està executant en primer pla:

  • Ctrl-c: Envia el senyal 2 (SIGINT). La majoria d'aplicacions estan programades per finalitzar l'execució quan reben aquesta senyal. Algunes comandes no ho fan així ho requereixen d'una doble confirmació abans de finalitzar el procés)
  • Ctrl+\: S'envia el senyal 3 (SIGQUIT). També depèn de com estigui programada l'aplicació.
  • Utilitzar kill

L'única forma de finalitzar un procés que s’executa en segon pla és utilitzar la comanda kill.

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).

Informació sobre processos: ps i pstree

ps

És una comanda que ens permet veure els processos en execució.

$ ps

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 actuals:

$ ps
  PID TTY          TIME CMD
 3910 pts/0    00:00:00 bash
 3963 pts/0    00:00:00 ps

Dos processos:

  • L'interpret d'ordres en si (bash) (PID 3910).
  • El propi procés de l'ordre ps (PID 3963).
  • TTY (terminal associada): on s'ha executat ps (ordre $ tty).
  • TIME: Temps acumulat d'ús de CPU.
  • CMD: la comanda que ha generat el procés.
$ id -u
1000
$ echo $EUID
1000

EUID: Effective User Identifier. Variable d'entorn

Mostrar tots els processos

Unix:

$ ps -e

$ ps -ef

$ ps -eF

$ ps -ely

BSD:

$ ps ax

$ ps axu
$ ps aux | head
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   3420  1944 ?        Ss   08:13   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    08:13   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    08:13   0:01 [ksoftirqd/0]
root         6  0.0  0.0      0     0 ?        S    08:13   0:00 [migration/0]
root         7  0.0  0.0      0     0 ?        S    08:13   0:00 [migration/1]
root         9  0.0  0.0      0     0 ?        S    08:13   0:00 [ksoftirqd/1]
root        11  0.0  0.0      0     0 ?        S<   08:13   0:00 [cpuset]
root        12  0.0  0.0      0     0 ?        S<   08:13   0:00 [khelper]
root        13  0.0  0.0      0     0 ?        S<   08:13   0:00 [netns]
$ ps -aux > psmenysaux
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html


L'ordre $ ps -aux normalment dona el mateix resultat si poseu $ ps aux

Excepte l'avís anterior (a l'ordre anterior hem redireccionat la sortida estàndard a un fitxer però l'error estàndard s'ha mostrat per la terminal). Això és així per que realment ps -aux us hauria de mostrar segons l'estàndard POSIX i UNIX, tots els processos amb una terminal associada (-a) per a l'usuari (-u) x. Si no teniu usuari x al sistema l'ordre suposa que realment volieu fer ps aux sense guió.

Paginar:

$ ps aux | more
$ ps aux | less

Buscar un procés:

$ ps ax | grep firefox
 2508 ?        Sl     6:16 /usr/lib/firefox-11.0/firefox
 2590 ?        Sl     0:41 /usr/lib/firefox-11.0/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so -greomni /usr/lib/firefox-11.0/omni.ja 2508 true plugin
 4003 pts/0    S+     0:00 grep --color=auto firefox

Cal ignorar la línia del grep.

També es pot utilitzar la comanda pidof:

$ pidof firefox
3044

Mostrar els processos d'un usuari:

$ ps -u root

Mostrar tots d'un usuari (els executat com root o com un altre usuari però amb SUID)

$ ps -U root -u root

Mostrar el nom d'un procés a partir del seu PID:

$ ps -p 7293 -o comm=
bash

Mostrar un procés pel nom de l'ordre

$ ps -C syslogd -o pid
PID
5280

Indicar els camps de la sortida

$ ps -eo user,pid,ppid,uid,gid,command,stat,tty,time,%cpu,ni,rss,%mem,share,stime
USER PID PPID UID GID COMMAND STAT TT TIME %CPU NI RSS %MEM - STIME
root 1 0 0 0 /sbin/init Ss ? 00:00:01 0.0 0 1496 0.1 - 16:38
root 2 0 0 0 [kthreadd] S< ? 00:00:00 0.0 -5 0 0.0 - 16:38
root 3 2 0 0 [migration/0] S< ? 00:00:00 0.0 - 0 0.0 - 16:38
root 4 2 0 0 [ksoftirqd/0] S< ? 00:00:00 0.0 -5 0 0.0 - 16:38
  • 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.
Opcions
  • a: Amb l'estil BSD, per defecte només es mostren els processos de l'usuari que executa l'ordre ps. L'opció a treu aquesta restricció i mostra tots els processos associats a una terminal.
  • x: Combinat amb a mostra tots els processos, associats o no a una terminal.
  • u: Mostra informació orientada a l'usuari. El resultat es certes columnes extres (USER, %CPU, MEM...) respecte a ax.
  • -e: genera una llista amb informació de tots els processos.
  • -l: mostra una llista llarga (long format) d'informació dels processos.
  • -f: mostra certa informació extra com el PPID i el UID. Realment.
  • -y: combinat amb -ls no mostra els FLAGS.
  • -F: encara més informació extra respecte -f.

pstree

És una comanda que permet veure els processos en execució en mode arbre

Estat del processos

Senyals

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

Model de 7 estats (amb paginació):

R “Running”. Procés en curs d’execució (l'està utilitzant la CPU)
T “sTopped”. Procés parat (amb les tecles Ctrl + Z per exemple)
S “Sleeping”. Procés dormit, en espera del processador.
D “Device”. Procés dormit en espera d’un recurs (generalment una 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.

El segon caràcter del camp STAT està posat a W si el procés s’ha mogut a l’espai de paginació.

Finalment apareix una N o un < com a tercer caràcter de la columna STAT si el procés és respectivament de menor o de major prioritat.

Processostat hugolucas.jpeg

Senyals

És un 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).

Exemples

Executar un programa abans de l'execució de cada comanda (execució de l'interpret d'ordres)

Ordres

ps

top

kill

killall

pidof

htop

atop

jobs

bg

fg

nohup

free

uptime

watch

Variables de shell i d'entorn

$$

$?

$PPID