Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Tutti gli amori dell'uomo, ancherch? diversi, hanno lo stesso motore.

Vittorio Alfieri 

Sondaggio:

Ti senti un sopravvissuto a...

Grande Fratello
Euro
tua mamma
tua suocera
le feste natalizie
la scuola
i tuoi ex
il/la partner

visualizza risultati


 

Multitasking: lavorare con i jobs

Adesso avviamo un po' di job in contemporanea, così:

/home/larry$ yes > /dev/null &
[1] 1024
/home/larry$ yes | sort > /dev/null &
[2] 1026
/home/larry$ yes | uniq > /dev/null
[e qui, premete Ctrl-Z per sospenderlo]
[3]+ Stopped yes | uniq >/dev/null

La prima cosa che dovreste notare di questi comandi è il simbolo & alla fine delle prime due righe. Mettere un & dopo un comando comunica alla shell di avviarlo fin dall'inizio in background (è soltanto un modo per evitare di dover avviare il programma, premere + e digitare bg). Così abbiamo avviato questi due comandi in background. Il terzo, attualmente, è sospeso e inattivo. Potreste notare come adesso la macchina sia diventata un po' più lenta, in quanto ci sono due processi in esecuzione che richiedono un po' di tempo CPU.

Ogni processo vi ha comunicato il suo numero di job. I primi due hanno mostrato anche il loro numero di Process IDentification, o PID, subito dopo il numero del job. Normalmente non è necessario conoscere il PID dei processi, ma qualche volta può tornare utile.

Eliminiamo il secondo processo, dato che può rallentare la macchina. Potrei semplicemente scrivere kill %2, ma sarebbe troppo semplice. Invece, facciamo così:

/home/larry$ fg %2
yes | sort > /dev/null
[e poi premete Ctrl+C per eliminarlo]

Come abbiamo appena dimostrato, fg prende anche i parametri che cominciano con %. In effetti, potevate anche digitare:

/home/larry$ %2
yes | sort >/dev/null
[e poi premete Ctrl+C per eliminarlo]

Questo funziona perché la shell interpreta automaticamente un numero di job come una richiesta di mettere quel job in foreground. È possibile distinguere un numero di job da altri numeri anteponendo %. Adesso digitiamo jobs per vedere quali job sono ancora in esecuzione:

/home/larry$ jobs
[1]- Running yes >/dev/null &
[3]+ Stopped yes | uniq >/dev/null

Il "-" significa che il job numero 1 è il secondo job pronto ad essere messo in foreground, se digitate fg senza dare nessun altro parametro. Il "+" significa che il job in questione è il primo della lista: un fg senza parametri porterà in primo piano il job numero 3. Comunque potete farlo anche tramite il suo numero, se volete:

/home/larry$ fg %1
yes >/dev/null
[adesso premeteCtrl+Z per sospenderlo]
[1]+ Stopped yes >/dev/null

Essere passati al job numero 1 ed averlo sospeso ha anche cambiato la priorità di tutti i vostri job. Potete vederlo con il comando jobs:

/home/larry$ jobs
[1]+ Stopped yes >/dev/null
[3]- Stopped yes | uniq >/dev/null

Adesso sono entrambi sospesi (perché li avete sospesi con + ), e il job 1 è il prossimo job che viene messo in foreground per default; questo perché lo avete messo in foreground manualmente, e successivamente sospeso. Il "+" si riferisce sempre al job più recente che è stato sospeso dal foreground. Potete rimetterlo in esecuzione di nuovo:

/home/larry$ bg
[1]+ yes >/dev/null &
/home/larry$ jobs
[1]- Running yes >/dev/null
[3]+ Stopped yes | uniq >/dev/null

Notate che adesso è in esecuzione, e l'altro job è tornato indietro nell'elenco ed ha il +. Ora eliminiamo tutti questi job per poter usare meglio la macchina:

/home/larry# kill %1 %3
[3] Terminated yes | uniq >/dev/null
/home/larry# jobs
[1]+ Terminated yes >/dev/null
/home/larry#

Dovreste vedere vari messaggi sulla terminazione dei job: nessuno muore tranquillamente, sembra. La tabella 2 fa un breve riassunto di tutto quello che dovreste sapere sul controllo dei job.

fg %job

E' un comando di shell che riporta in foreground un job. Per scoprire a quale viene applicato per default, digitate jobs e cercate quello con il +. Parametri: numero di job opzionale. Il default è il processo identificato con il +.

& Quando viene aggiunta una & alla fine della linea di comando, il comando viene eseguito automaticamente in background; il processo è poi soggetto a tutti i metodi normali di controllo dei job.
bg %job E' un comando di shell che fa girare in background un job sospeso. Per scoprire quale è di default, digitate jobs e cercate quello con il +. Parametri: numero di job opzionale. Il default è il processo identificato con il +.
kill %job PID E' un comando di shell che termina un job in background, sia sospeso che attivo. Si dovrebbe specificare sempre il numero di job, e se state usando il numero di job, ricordatevi di anteporvi un %. Parametri: il numero di job (preceduto da %) o il PID (senza %). Su una stessa linea si possono specificare più job.
jobs Questo comando di shell elenca semplicemente alcune informazioni sui job attivi o sospesi al momento. Talvolta indica anche quelli che sono stati appena terminati.
Ctrl+C E' il generico carattere di interrupt. In genere, se lo digitate mentre c'è un programma che gira in primo piano, lo termina (qualche volta servono un paio di tentativi); non funziona con tutti i programmi.
Ctrl+Z Questa combinazione di tasti sospende un programma, anche se alcuni programmi la ignorano. Una volta che è stato sospeso, il job può essere avviato in background o ucciso.
Tab.2: Riassunto dei comandi e dei tasti usati nel controllo dei job.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2022 Cataldo Sasso