Cloud with rain
.:G
G:.
0 and 1 serie, black on white
pulled card
myjsp.feelinglinux.com
ver. 1.1.9-4
Hallo, welcome to my world.
Here you can find some stuff about computer science.
<<< Enjoy your visit! >>>
0 and 1 serie, white on black

Introduzione ai processi e loro gestione

        Scritto: Giansante Gabriele, 2001     

Se si vuole imparare ad usare Linux, un concetto fondamentale da comprendere e' quello di processo. Cos'e' un processo? In sostanza, un processo e' un programma in esecuzione. Ogni processo viene identificato da un numero intero chiamato PID (Process IDentificator, ovvero identificatore di processo). Questo identificatore e' importante perche' consente di individuare i programmi, cosi' da gestirli in modo vario e flessibile (creazione, termine, assegnazione della priorita' di esecuzione, ecc.).

Creazione di un processo

Quando mandiamo in esecuzione un programma, viene creato almeno un nuovo processo.
In Linux, come nei sistemi Unix tradizionali, esiste un unico processo iniziale chiamato init con "PID=1". Questo processo e' il padre di tutti i processi utente. Cosa significa che un processo e' il padre di un altro processo?
Un processo puo' dividersi (fork) in due, in modo da continuare a fare il lavoro precedente e contemporaneamente lanciare un nuovo processo (esiste una chiamata di sistema, o system call, dal nome fork che ha questo scopo). Il processo che si e' diviso viene chiamato processo padre, mentre quello nuovo prende il nome di processo figlio. Senza introdurre argomenti avanzati di gestione dei sistemi operativi, basti sapere, inoltre, che il processo padre puo' aspettare il termine del processo figlio per compiere determinate operazioni in conserguenza.
Torniamo al processo "init". Linux mette a disposizione un certo numero di terminali (o porte terminali) attraverso le quali interagire con il sistema. Per ogni porta terminale, il processo "init" genera un processo "mingetty" (getty nei sistemi Unix) che inizializza i parametri del terminale e si mette in attesa di un login e di una password.
La presenza dei terminali puo' essere toccata con mano quando si effettua l'avvio in modalita' testo e non grafica. Per default si attiva il primo terminale. Con ALT-Fx (Fx = tasto funzione) si passa da un terminale all'altro, ognuno con una propria richiesta di login e password.
Una volta inseriti login e password, viene creato un nuovo processo di "login" che alla fine del riconoscimento, attiva una shell o interprete di comandi (si', e' un ulteriore nuovo processo).
I comandi che solitamente digitiamo sono elaborati dalla shell, con il compito di eseguire i programmi da noi indicati (nuovi processi, figli dell'interprete dei comandi).

Statistiche sui processi

Sappiamo a grandi linee come vengono creati i processi. Come si fa a sapere quali processi ci sono in memoria?
Il comando "ps" e' quello che fa per noi. "ps" serve ad elencare i processi e prevede un gran numero di opzioni, in grado di soddisfare quasi tutti i tipi di richieste. Vediamo alcuni esempi di output del comando "ps":

ps
  PID TTY          TIME CMD
  ...
 5531 tty1    00:00:00 bash
 6187 tty1    00:00:00 vi
 6830 tty1    00:00:00 bash
 6831 tty1    00:00:00 ps
ps -a
  PID TTY          TIME CMD
  ...
 5531 tty1    00:00:00 bash
 5643 tty2    00:00:00 bash
 6187 tty1    00:00:00 vi
 6781 tty2    00:00:00 man
 6784 tty2    00:00:00 sh
 6785 tty2    00:00:00 sh
 6788 tty2    00:00:00 groff
 6789 tty2    00:00:00 less
 6792 tty2    00:00:00 grotty
 6850 tty1    00:00:00 bash
 6851 tty1    00:00:00 ps
ps -ax
  PID TTY      STAT   TIME COMMAND
    1 ?        S      0:06 init [3]
    2 ?        SW     0:36 [kflushd]
  ...
  535 ?        S      0:00 crond
  ...
  734 tty1     SW     0:00 [mingetty]
  ...
 5531 tty1     S      0:00 -bash
 5643 tty2     S      0:00 -bash
 6187 tty1     S      0:00 vi doc/primipassi/processi.ggj
 6781 tty2     S      0:00 man ps
 6784 tty2     S      0:00 sh -c (cd /usr/share/man/it ; (echo -e ".ll 11.8i\n.p
 6785 tty2     S      0:00 sh -c (cd /usr/share/man/it ; (echo -e ".ll 11.8i\n.p
 6788 tty2     S      0:00 /usr/bin/groff -Tlatin1 -mandoc
 6789 tty2     S      0:00 /usr/bin/less -isr
 6792 tty2     S      0:00 grotty
 6875 tty1     S      0:00 /bin/bash -c (ps -ax) >/tmp/voHTljlY 2>&1
 6876 tty1     R      0:00 ps -ax
Ho evidenziato in nero le righe relative alla gerarchia dei processi spiegata in precedenza.
Pubblicita'
Consultando il manuale (man ps) e' possibile scoprire molte altre opzioni che potrebbero essere utili, come "u" che serve a visualizzare anche gli utenti con cui sono stati lanciati i processi.
Come si puo' vedere, un dato sempre presente e' il PID del processo. Tale PID puo' essere usato, ad esempio per uccidere il processo ad esso associato ed ingenerale per effettuare tutte le operazioni possibili sui processi.

Chiusura dei processi

Un processo puo' essere terminato o ucciso. Per terminare un processo si usa il comando "kill PID", dove PID e' l'identificativo associato al processo che si vuole chiudere. Il comando "kill", nella forma mostrata, invia al processo un segnale di "termine" (TERM) che il processo stesso puo' catturare (ed annullare) o meno.
La facolta' di annullare l'ordine ricevuto, ha come conseguenza che il processo non sempre terminera'. Potrebbe essere necessario inviare un altro tipo di segnale, il numero 9, ovvero il segnale di uccisione (KILL) che non puo' essere catturato: "kill -9 PID". In pratica, con il segnale di KILL, viene forzata la chiusura del processo.


Hai trovato utile questo articolo?
Aiutami a condividerlo o metti un "mi piace".
Grazie mille!


Gli strumenti di condivisione (Google+, Facebook) sono visibili in alto a destra solo dopo aver accettato la policy di utilizzo dei cookie per questo sito.
FAQ - Come faccio a cambiare la mia scelta?

 

Strumenti (myjsp.feelinglinux.com)
Gioco: allenamento con la tastiera Strumenti di codifica/decodifica URI (%-encoding) e Base64 Strumenti di calcolo online per IP e Reti
QUIZ GAME
Quiz game

Cerca @myjsp.feelinglinux.com

Pubblicita'