Gestió de programes i processos dels SO en general i a Linux des del terminal. Gestió interativa (monitor, top), estats dels processos, gestió per comandes (ps, jobs), primer i segon pla (&, bg), parar vs finalitzar (kill, pkill), scripts com a processos, paral·lelisme.
Processos del SO:
Definició: Un procés és un programa en execució
Un programa es una col·lecció d'instruccions. Exemple: la comanda ls
(i moltes altres) és un programa executable guardat en algún directori.
Per defecte a /bin/ls
Un procés ocupa espai a la memòria RAM i necessita la CPU per poder funcionar, que s'executin les instruccions que necesita.
Un procés només pot tenir un únic número natural PID (identificador). Això és així en tots els SO.
El primer procés que arrenca a Linux és l’init. Té el PID 1 i és el responsable de l'inici i l'apagada del sistema. Tots els processos tenen un procés pare (PPID, no confoneu amb PID) excepte aquest.
Estats dels processos
Els més habituals:
running (execució)
waiting o blocked.
En general poden estar en aquest estat perquè esperen una entrada (I/O) de l’usuari, com per exemple que li demani introduïr un text. També poden estar blocked per què l’usuari els ha aturat o minimitzat.
Hi ha altres estats menys comuns, que succeeixen quan falta memòria RAM o CPU: zombie (falta CPU o ha finalitzat però no pot avisar el seu procés pare), swapped (falta memòria RAM i per tant cal enviar-lo a la memòria virtual=swap a Linux).
Els estats dels processos a Linux són (extret de l’ajuda de la comanda ps):
man ps
PROCESS STATE CODES
Here are the different values that the s, stat and state output
specifiers (header "STAT" or "S") will display to describe the
state of a process:
D uninterruptible sleep (usually IO)
I Idle kernel thread
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to
complete)
T stopped by job control signal
Si consultem la llista de processos mentre tenim obert el terminal:
man ps a
La columna STAT, la primera lletra, ens indica l’estat del procés. Tots estan amb S (esperen entrada de l’usuari) excepte l’últim que hi ha una R de running.
Els altres símbols són: + → en primer pla, s → gestiona la sessió. tty → és el terminal
Gestió interactiva (en directe) dels processos.
top
Comanda per a veure en pantalla, de forma interactiva (cada 5 segons s'actualitza l'estat), tots els processos a la CPU, i la memòria que ocupen.
Ens permet fer moltíssimes coses:
[https://www.layerstack.com/resources/tutorials/How-to-use-top-and-htop-Linux-command-for-Process-Management]
htop
És una variant del top, fa el mateix però de forma una mica més ordenada i atractiva.
system-gnome-monitor
Per facilitar la vida als usuaris no experts en sistemes operatius, algunes distribucions inclouen Administradors de tasques com el del Windows.
A les distribucions basades en Ubuntu i Debian tenim el system-gnome-monitor
Si no hi és, el pots instal·lar amb:
$ sudo apt install gnome-system-monitor
Comandes gestió de processos.
ps
Mostra la llista de processos que hi ha.
Combinacions importants:
Llista processos en estat d'execució:
ps -ef
Mostra informació d'un procés concret, de tots els terminals i usuaris.
ps -aux | grep firefox
| grep
serveix per filtrar a on apareix la paraula que indiquem (pex firefox).
kill i pkill
Kill normalment serveix per a forçar la finalització de processos.
pkill fa el matex però rep com a paràmetre el nom del procés en comptes de PID (més fàcil de recordar)
kill -15 <PID_PROCES>
pkill -15 <NOM_PROCES>
Tot i el seu nom, la comanda kill no només serveix per finalitzar processos. Segons el senyal que li enviem pot fer altres operacions com finalitzar-lo a poc a poc, aturar-lo (19), continuar un procés parat (18) o reiniciar (1)
El comando kill:
Finalizar un proceso SIGTERM (15)
Terminar un proceso de forma inmediata SIGKILL (9)
Suspender un proceso SIGSTOP (19)
Reactivar un proceso SIGCONT (18)
Reiniciar un proceso SIGHUP (1)
Execució de processos propis.
En primer pla, posem el nom del programa:
firefox
Veiem que ja no podem fer res al terminal fins que no el tanquem.
Per arrencar en segon pla, posem el nom del programa seguit del caràcter &:
firefox &
Podem seguir usant el terminal si el procés està en segon pla.
Altres programes que poden ser processos són:
- Totes les comandes de Unix: que estan a la carpeta /bin (ls, mkdir, pwd, …)
- gedit
- gnome-calculator
- sleep
- libreoffice
Gestió de processos de la sessió del terminal.
Obrir terminal: Ctrl+ Alt + T
No són tant importants, però en ocasions ens poden ajudar:
jobs
Serveix per mostrar l'estat dels processos del terminal i el seu PID.
jobs -l
bg i fg
bg, envia un procés a segon pla, amb l'id que indica al comanda jobs.
bg %1
fg funciona igual que bg, i envia un procés a primer pla, amb l'id que indica al comanda jobs.
Ctrl+C
Mata (finalitza) el procés.
Ctrl+Z
Para el procés. Llavors es pot tornar a reanudar amb altres comandes.
Exercicis. Bloc 1. Comandes de processos.
Escriu la o les comandes necessàries per cada cas:
Comandaments: bg, fg, jobs, kill, ps, top, &, Ctrl+C, Ctrl+Z
-
Mostra els processos corrent al terminal actual.
-
Mostra els processos corrent al sistema a tots els terminals i usuaris.
-
Mostra els processos corrent al sistema dinàmicament.
-
Llença un programa gràfic (gedit, xlogo, etc.) al foreground del terminal.
-
Mata el procès des del terminal.
-
Llença un programa gràfic (gedit, xlogo, etc.).
-
Llença un programa gràfic (gedit, xlogo, etc.) al background del terminal.
-
Mostra el PID del programa que està corrent al background.
-
Mata el procés utilitzant el seu PID.
-
Llença un programa gràfic (gedit, xlogo, etc.) al background del terminal.
-
Mostra el jobspec del procès que està corrent al background.
-
Fes que el procés vagi al foreground del terminal.
-
Pausa el procés i mira com es comporta la finestra.
-
Fes que el procés torni a còrrer al foreground.
-
Torna a pausar el pocés i fes que torni a córrer al background.
Solucions Exercicis Bloc 1.
1 ps
2 ps aux
3 top
4 libreoffice
5 Cotrol + c (parar el proceso)
6 geany
7 Geany & (puedes continuar con la terminal)
8 ps
9 kill -9 5405
10 geany &
11 Jobs (muestra los procesos que se han ejecutado en el terminal)
12 fg %1 (pondremos el numero que esta en el segundo plano Control+z)
13 Control + z
14 fg %1
15 bg %1 (Si un programa se para, se puede continuar con el bg%1 para que siga corriendo)
Exercicis. Bloc 2. Activitat guiada processos.
a. Obre el Firefox
firefox
b. Cerca la comanda per trobar el PID del Firefox.
Aquesta comanda ens llista tots els processos en execució:
ps -e
No ens serveix; usarem aquesta cadena de comandes:
ps -e | grep <nom_programa>
ps -e | grep firefox
Si el tenim arrencat ens apareix l’id 5329 Sinó, no ens apareix cap linia.
c. Finalitza (Mata) el procés.
Opció 1. Ir al terminal donde hemos ejecutado el proceso. Pulsar: Ctrl + C
Opció 2.
Consultem el PID:
ps -e | grep firefox
I ara fem la comanda: kill -9 PID
kill -9 6412
Opció 3.
Tanquem totes les sessions de Firefox alhora. Ens pregunta si estem segurs (y/n).
pkill -i firefox
d. Obre Firefox en segon pla. Tanca'l. Pista: &
firefox &
Fixeu-vos que podem seguir treballant amb el terminal.
e. Executa el procés Sleep 600 i Sleep 1000 en segon pla
sleep 600 &
sleep 1000 &
f. Visualitza els processos en curs
ps -l
g. Visualitza els treballs en curs
jobs -l
h. Porta els 2 processos en primer pla
fg %1
fg %2
i. Vuelve a visualizar los trabajos y procesos en curso
ps -e | grep firefox
Scripts com a processos
Podem crear els nostres propis programes amb la shell Bash de Linux, i executar-los com a processos per tal d'automatitzar tasques.
Començarem creant un script no interactiu, és a dir, que en cap cas demani info a l’usuari, i farà totes les operacions seguides. Això són scripts en batch.
Anem a crear-ne un:
nano hacking.sh
O
gedit hacking.sh
Ara, escriviu o copieu aquest text:
#!/bin/bash
for i in {1..100}
do
echo "Hacking. $i% completed."
sleep 2
done
echo "Hacking completed :)"
Per convertir aquest fitxer a progama executable ho fem amb la comanda:
chmod +x hacking.sh
I l'executem amb aquesta:
./infinit.sh
O bé es pot executar directament amb aquesta comanda (si no tenim permisos d'administració):
bash hacking.sh
Ens ha de sortir text com aquest, cada 2 segons (donat que hem posat la instrucció sleep 2)
Hacking. 1% completed.
Hacking. 2% completed.
Quina por, no para de sortir text, com l’aturem ????
Al primer terminal Ctrl + Z
o Ctrl + C
Provem d'executar-lo en segon pla:
./hacking.sh &
Així pots seguir usant el terminal.
No para de sortir text cada 2 segons, com aturo això ??
La opció més còmode és:
kill -9 hacking
Activitat guiada 4. Scripts com a processos i estats Entrada/Sortida.
Pas 0. Obriu 2 terminals, un per executar l’script i l’altre per aplicar el ps per veure l’estat dels perfils.
Pas 1.
nano script.sh
#/bin/bash
read -p “Introdueix el teu nom: ” nom
while true; do
echo “Hola $nom”
done;
Pas 2.
chmod u+x script.sh
Pas 3.
./script.sh
Pas 4. Al segon terminal, aplica
ps j
Pas 5. Al primer terminal
Ctrl + Z
Pas 6. Al segon terminal
ps j
I amb aquests exemples hem pogut analitzar els 3 estats (execució, bloqueig i finalització).
Referències (any 2023-2024)
Presentació Processos Linux Activitats Guiades Processos Feta! Exercicis Pendent!