prof. Nunzio Brugaletta |
atapSO |
EnneBi –
Computer Science
Avanti – Indietro – Inizio
La fase di inizializzazione di un sistema Linux crea il processo con PID 0. A parte il primo, ogni processo viene generato da un processo padre. Ogni nuovo processo viene generato dalla duplicazione del processo padre, per mezzo della chiamata di sistema fork() (un servizio richiesto al kernel che genera, appunto, un nuovo processo). La fork() genera un nuovo entry nella tabella dei processi attivi con tutti i campi uguali al processo padre tranne, per esempio, quelli del PID e dell'identificativo del processo padre, dopo di ciò il processo padre provvede a mettere in coda, assieme agli altri, il processo figlio. Con la chiamata alla funzione di sistema exec() si permette al processo di sostituire la propria immagine con quella prodotta dal file eseguibile avviato.
Il sistema più semplice per avere le informazioni indispensabili sui processi avviati è usare ps (Process Status):
$ ps PID TTY TIME CMD 1618 pts/0 00:00:00 bash 1711 pts/0 00:00:00 emacs 1712 pts/0 00:00:00 ps
in questo esempio è messo in evidenza che ci sono 3 processi, di cui uno (quello con PID 1712) è il processo associato all'eseguibile ps stesso. Le altre colonne indicano, nell'ordine, il terminale associato al processo, il tempo CPU utilizzato, la linea di comando da cui è stato avviato il processo.
Per ogni processo avviato viene generata una sottodirectory nello pseudo-filesystem /proc, con il nome coincidente con PID e proprietario l'utente che ha lanciato il comando:
$ ls -l /proc/1618 -r--r--r-- 1 tux tux 0 feb 21 20:13 cmdline lrwxrwxrwx 1 tux tux 0 feb 21 20:13 cwd -> /home/tux -r-------- 1 tux tux 0 feb 21 20:13 environ lrwxrwxrwx 1 tux tux 0 feb 21 20:13 exe -> /bin/bash dr-x------ 2 tux tux 0 feb 21 20:13 fd -r--r--r-- 1 tux tux 0 feb 21 20:13 maps -rw------- 1 tux tux 0 feb 21 20:13 mem -r--r--r-- 1 tux tux 0 feb 21 20:13 mounts lrwxrwxrwx 1 tux tux 0 feb 21 20:13 root -> / -r--r--r-- 1 tux tux 0 feb 21 20:13 stat -r--r--r-- 1 tux tux 0 feb 21 20:13 statm -r--r--r-- 1 tux tux 0 feb 21 20:13 status
nell'elenco visualizzato alcuni file sono collegamenti simbolici: nel caso dell'esempio, cwd serve per individuare la directory in cui si trovava l'utente che ha lanciato il processo. Ci si potrebbe, per esempio, spostare nella directory, prendendo il parametro da specificare di seguito al comando cd, da /proc/1618/cwd:
$ pwd /proc/1618 $ cd < /proc/1618/cwd $ pwd /home/tux
nella riga con il comando cd viene usato l'operatore di re-indirizzamento dell'input (il simbolo <): invece di specificare direttamente il nome della directory dove ci si vuole spostare, si specifica il file da cui leggere il nome.
I vari file creati nella directory del processo, costituiscono le informazioni contenute nell'immagine del processo:
File |
Contenuto |
---|---|
cmdline |
La linea di comando che ha lanciato il processo |
cwd |
Collegamento alla directory di lavoro corrente |
environ |
Le variabili di ambiente del processo |
exe |
Collegamento all'eseguibile che ha generato il processo |
fd |
Sottodirectory con i file aperti dal processo |
maps |
La mappa della memoria e i relativi permessi di accesso |
mem |
Informazioni per permettere l'accesso alle pagine del processo (le varie parti in cui è diviso) |
mounts |
I punti di montaggio dei vari file system accessibili |
root |
Collegamento alla root |
stat |
Informazioni sullo stato del processo |
statm |
Informazioni sull'occupazione di memoria delle pagine |
status |
Informazioni presenti sia in stat che in statm ma in formato più leggibile |
Tutte le informazioni contenute nei file sono visualizzabili, per esempio, utilizzando il comando less. Fa eccezione environ, che necessita, come riportato nella pagina man di proc, per essere visualizzato in forma più comprensibile, della linea di comando:
$ (cat /proc/1618/environ; echo) | tr “\000” “\n”
Nel file virtuale status sono sintetizzate le informazioni sull'immagine del processo:
$ less /proc/1618/status Name: bash State: S (sleeping) Tgid: 1618 Pid: 1618 PPid: 1612 TracerPid: 0 Uid: 1003 1003 1003 1003 Gid: 100 100 100 100 FDSize: 256 Groups: 5 6 10 20 21 22 24 25 26 27 29 30 44 60 100 106 1003 VmSize: 4044 kB VmLck: 0 kB VmRSS: 1592 kB VmData: 312 kB VmStk: 20 kB VmExe: 588 kB VmLib: 1428 kB ...
dopo lo stato attuale del processo e gli identificativi del processo stesso (Pid), del padre (PPid), dell'utente, del gruppo cui appartiene l'utente, vengono elencate le dimensioni in memoria delle varie parti che compongono l'immagine.
http://ennebi.solira.org |
ennebi@solira.org |