prof. Nunzio Brugaletta

atapSO

EnneBi – Computer Science
AvantiIndietroInizio




Job control

La pagina man della bash riporta che il job control

indica la capacità di fermare (sospendere) selettivamente l’esecuzione di processi e continuare (riprendere) la loro esecuzione più tardi. Tipicamente, un utente impiega questo servizio attraverso una interfaccia interattiva fornita unitamente dal driver del terminale del sistema e dalla bash.

Per trattare questo argomento è necessario premettere alcune definizioni:

Si può, ora, passare ad esaminare i comandi per la gestione dei job:

$ ps
  PID TTY          TIME CMD
 1271 tty1     00:00:00 bash
 1313 tty1     00:00:00 ps
$ emacs &
[1] 1314
$ ps u
USER    PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
tux    1271  0.0  0.4  4044 1596 pts/0    S    17:44   0:00 bash
tux    1314  0.0  2.4 12408 7948 pts/0    S    17:52   0:00 emacs
tux    1326  0.0  0.2  2572  656 pts/0    R    18:11   0:00 ps u

il primo comando impartito mostra i processi attualmente avviati dall'utente: il 1271 la bash e il 1313, il comando ps. Nella successiva riga di comando viene avviato in background emacs. La riga di comando è terminata dal carattere & che serve appunto per lanciare un programma in background. Il sistema risponde con due numeri: 1 il numero di job, 1314 il PID del processo.

In questo momento non si può interagire con emacs, non si vede la schermata ma al suo posto c'è nuovamente il prompt di sistema. Il successivo comando ps mostra la presenza, oltre a se stesso, di due processi. In questo caso è usato il parametro u (User) che fornisce anche informazioni sull'utente, l'occupazione di memoria (Virtual e Resident Size) e lo stato attuale del processo. Bash ed emacs sono in stato Sleeping, ps è in stato Running (la colonna STAT).

Nel momento della visualizzazione il processo in stato di Running era quello associato all'esecuzione del comando ps -u. I processi associati all'esecuzione delle linee di comando ps e emacs, essendo programmi interattivi, sono in attesa di input da tastiera e quindi si trovano in stato di Sleeping.

$ jobs
[1]+  Running                 emacs &

Il comando jobs elenca i job avviati con il proprio numero identificativo e la riga di comando associata ad essi.

$ fg 1
emacs

il comando fg seguito dal numero di job, porta in primo piano emacs. Per tornare al prompt di sistema bisogna sospendere il processo attualmente in primo piano. Ciò avviene premendo la combinazione di tasti Ctrl+z.

[1]+  Stopped                 emacs
$ ps u
USER    PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
tux    1271  0.0  0.4  4044 1596 tty1     S    17:44   0:00 bash
tux    1314  0.0  2.4 12408 7948 tty1     T    17:52   0:00 emacs
tux    1325  0.0  0.2  2572  656 tty1     R    18:11   0:00 ps u

Il sistema risponde con il messaggio di stop: il processo si è bloccato (STAT riporta sTopped) ed è passato in background. Se fosse stato un programma che poteva proseguire l'esecuzione senza interazione con l'utente, si sarebbe potuto mandare un segnale di continuazione:

$ bg 1
[1]+ emacs &
$ ps u
USER    PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
tux    1271  0.0  0.4  4044 1596 tty1     S    17:44   0:00 bash
tux    1314  0.0  2.4 12408 7948 tty1     S    17:52   0:00 emacs
tux    1327  0.0  0.2  2572  656 tty1     R    18:11   0:00 ps u

il processo emacs è transitato in stato Sleeping.

Per terminare un processo è necessario mandare al processo un apposito segnale:

$ kill -SIGKILL 1314
$ ps u
USER    PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
tux    1271  0.0  0.4  4044 1596 tty1     S    17:44   0:00 bash
tux    1347  0.0  0.2  2568  652 tty1     R    18:53   0:00 ps u
[1]+  Killed                  emacs

il comando kill lancia un messaggio di terminazione e il parametro -SIGKILL aggiunge il fatto che la terminazione deve essere incondizionata.




AvantiIndietro - Inizio

http://ennebi.solira.org

ennebi@solira.org