Basi di Linux - I job: background, annullamento e sospensione
September 21, 2007
I job: background, annullamento e sospensione
Prima ho parlato di processi in background che girano silenziosamente senza che noi ce ne accorgiamo. Per spiegare come funziona lo stato di background creiamo un script che ci consente di calcolare un valore tramite un’espressione. Apriamo un nuovo file che chiameremo prova2.sh:
[roberto@diamondhead roberto]$ vi prova2.sh
#!/bin/bash
LIMIT=900000
for (( a=1; a<=LIMIT; a++ ))
do
z=$(($z+3-$a))
done
echo $z > result.txt
diamo i permessi di esecuzione e mandiamo in esecuzione lo script:
[roberto@diamondhead roberto]$ chmod +x prova2.sh
[roberto@diamondhead roberto]$ ./prova2.sh
notiamo che il nostro terminale è attualmente occupato dall’esecuzione di questo script. Se il valore di LIMIT fosse ancora più grande il tempo che dovremo aspettare per avere il terminale libero sarebbe ancora più elevato. Per ovviare a questo potremo aprire un’altro terminale, oppure mettere il nostro script shell (il nostro processo) in background in questo modo:
[roberto@diamondhead roberto]$ ./prova2.sh &
[1] 1912 il sistema ci da una serie di informazioni che indicano il numero del job (tra parentesi quadre) e il PID del processo. Difatti se noi digitiamo:
[roberto@diamondhead roberto]$ ps -ef | grep prova2.sh
roberto 1916 1333 99 10:59 pts/0 00:00:08 /bin/bash ./prova2.sh
vedremo che appunto, il PID del processo corrisponde con quello che il sistema ci ha dato quando abbiamo lanciato lo script. Se ora vogliamo vedere quali sono i nostri jobs in esecuzione possiamo digitare:
[roberto@diamondhead roberto]$ jobs
[1]+ Running ./prova2.sh &
Il numero del job è 1, è in esecuzione, e il suo nome è prova2.sh. A questo punto possiamo lavorare con altre cose intanto che il nostro script è in esecuzione. Oppure possiamo ucciderlo, perchè magari non ci interessa più.
In questo modo:
[roberto@diamondhead roberto]$ ./prova2.sh &
[2] 1940
[1] Done ./prova2.sh
[roberto@diamondhead roberto]$ ps -ef | grep prova2.sh
roberto 1940 1333 99 11:07 pts/0 00:00:03 /bin/bash ./prova2.sh
[roberto@diamondhead roberto]$ kill -9 1940
[roberto@diamondhead roberto]$ ps -ef | grep prova2.sh
[2]+ Killed ./prova2.sh
il comando kill -9 uccide un processo immediatamente, si potrebbe anche aver terminato il processo facendo riferimento ai jobs in esecuzione:
[roberto@diamondhead roberto]$ ./prova2.sh &
[1] 1947
[roberto@diamondhead roberto]$ jobs
[1]+ Running ./prova2.sh &
[roberto@diamondhead roberto]$ jobs
[1]+ Running ./prova2.sh &
[roberto@diamondhead roberto]$ kill %1
[roberto@diamondhead roberto]$ jobs
[1]+ Terminated ./prova2.sh










Leave a Reply