Cosa sta succedendo veramente?
È importante capire che il controllo dei job viene fatto dalla shell. Non esiste nel sistema un programma fg; piuttosto fg,
bg, &, jobs e kill sono tutti comandi interni alla shell (qualche volta kill è un programma indipendente, ma la shell bash
usata da Linux ce l'ha interno). Questo è un modo logico di procedere: siccome ogni utente ha il proprio spazio per il controllo
dei job, e ogni utente ha già la sua shell, è più semplice far controllare i job dell'utente alla shell. Quindi,
ogni numero di job di un utente si riferisce soltanto a quell'utente: il mio job numero [1] e il tuo job numero [1] sono due processi
totalmente differenti. In effetti, se siete loggati più di una volta, ogni vostra shell avrà dati diversi per controllare
i job, così ogni utente può avere due job diversi con lo stesso numero in due shell diverse.
Il modo per riferirsi in modo sicuro ad un processo è mediante il numero di identificazione di processo, o Process ID (PID).
Questo numero viene assegnato dal sistema: ogni processo ha un PID univoco. Due utenti diversi possono riferirsi ad un processo
mediante il suo PID e sapere che si stanno riferendo allo stesso processo (assumendo che siano loggati nella stessa macchina!).
Diamo un'occhiata ad un altro comando per capire cosa sono i PID. Il comando ps elenca tutti i processi in esecuzione,
compresa la vostra shell. Provate. Ha anche alcune opzioni: le più importanti (secondo molti) sono a, u e x.
L'opzione a elencherà i processi di tutti gli utenti, non solo i vostri. L'opzione x mostrerà i processi
che non hanno un terminale associato (principalmente sono programmi di sistema che non comunicano con l'utente attraverso la tastiera).
Infine, l'opzione u dà ulteriori informazioni sui processi, che spesso sono utili.
Per avere davvero un'idea di cosa sta facendo il sistema, mettete insieme tutte le opzioni: ps -aux . Potete vedere i processi
che usano più memoria guardando la colonna %MEM, e più tempo di CPU sulla colonna %CPU (la colonna TIME elenca il tempo
totale di CPU usato).
Un'altra nota veloce sui PID. kill, oltre ad accettare le opzioni nella forma %numero-job, accetta direttamente anche i PID.
Così, mettete yes > /dev/null in background, eseguite ps e cercate yes . Quindi digitate
kill PID (in genere è più semplice eliminare il processo tramite il numero di job invece che con il PID).
Se iniziate a programmare in C nel vostro sistema Linux, imparerete che il controllo dei job della shell è soltanto una versione
interattiva delle chiamate fork e execl. È troppo complesso da vedere qui, ma potrebbe essere utile ricordarlo più avanti
quando dovrete programmare e vorrete eseguire processi multipli di un singolo programma.
|