6.1 Processi e job

Un processo è un programma in esecuzione ed è identificato da un codice univoco chiamato PID (process identifier). Per vedere informazioni riguardo i processi, come lo stato, il tipo e il proprio PID, digitare:

ps

Un processo può essere eseguito in foreground, in background o essere sospeso. In generale la shell non ritorna la UNIX prompt finchè il processo corrente non termina la sua esecuzione. Alcuni processi richiedono molto tempo per essere eseguiti e di conseguenza tengono occupato il terminale che non può eseguire altri processi. Eseguendo in Background un processo duraturo, la UNIX prompt ritorna subito disponibile, e altri processi possono essere avviati mentre il processo originale continua ad essere eseguito.

Eseguire i processi in background

Per avviare un processo in Background, digita un & alla fine della linea di comando. Per esempio, il comando sleep attende un dato numero di secondi prima di continuare. Digitando

sleep 10

In questo modo attenderà 10 secondi prima di tornare il command prompt %. Finché il prompt command non è ritornato, non puoi fare nulla eccetto che aspettare.

Per eseguire sleep in  background, digita

sleep 10 &
[1] 6259

Il carattere & esegue il lavoro in background e ritorna il prompt immediatamente, consentendo l’esecuzione di altri processi.

La prima linea nell’esempio precedente è scritta dall’utente; la linea successiva, indicanter il job number ed il PID, è ritornata dalla macchina. Il job number (indicato tra parentesi quadre) e il PID è notificato all’utente quando un processo in background termina.  Background è utile per i processi che impiegano molto tempo.

Mettere in background un processo attivo

Digitare:

sleep 1000

Puoi sospende un processo in foreground digitando ^Z, tenendo premuto [Ctrl] e il tasto [z]. dopo per metterlo in background, digita

bg

Nota: non mettere in background i programmi che richiedono l’interazione utente

6.2 Elenca i processi sospesi e in background

Quando un processo è in esecuzione, in background o sospeso, sarà presente in una lista, identificato dal proprio job number. Per esaminare questa lista

jobs

Un esempio di job list è:

  1. Suspended sleep 1000
  2. Running netscape
  3. Running matlab

Per riprendere (foreground) un processo precedentemente sospeso, digita

fg %numero_del_job

Per esempio, per riprendere sleep 1000, digiata

fg %1

Digitando fg senza nessun job number foregrounds, l’ultimo processo sospeso.

6.3 Uccidere i processi

kill (uccide un processo)

Alcune volte è necessario uccidere un processo  (per esempio, quando un programma esegue un loop infinito)

Per uccidere un processo in esecuzione in  foreground, digita ^C (control c). Per esempio, esegui

sleep 100
^C

Per uccidere un processo sospeso o in background, digita

kill %numero_del_job

Per esempio, esegui

sleep 100 & jobs

Se il suo job number è 4, digita

kill %4

Per verificare se il comando ha funzionato, esamina la job list ancora per vedere se il processo è stato rimosso.

ps (stato del processo)

Alternativamente, i pocessi possono essere uccisi trovando i loro process numbers (PIDs) ed usando kill PID_number

sleep 1000 & ps
PID TT S TIME COMMAND
20077 pts/5 S 0:05 sleep 1000
21563 pts/5 T 0:00 firefox

Per uccidere il processo sleep 1000, digita

kill 20077

e poi digita ps ancora per vedere se è stato rimosso dalla lista. Se un processo non si fa uccidere, usa l’opzione  -9, digita

kill -9 20077

Nota: non è possibile uccidere processi appartenti ad altri utenti!!!

Sommario

Comando

Significato

comando & eseguire un processo in background
^C uccidere il job eseguito inforeground
^Z sospendere i job eseguito in foreground
bg mettere in background il job sospeso
jobs lista dei job correnti
fg %1 mettere in foreground il job numero 1
kill %1 uccidere il job numero 1
ps listare i processi correnti
kill 26152 uccidere il processo numero 26152

 

whitone@netstudent.polito.it, © 25 febbraio 2009
m.stonebank@surrey.ac.uk, © 9 ottobre 2000
Questa esercitazione è rilasciata sotto Creative Commons License.