Compago

...free knowledge

 
  • Increase font size
  • Default font size
  • Decrease font size
Home Manuali Linux Gestione processi da shell linux

Gestione processi da shell linux

E-mail Stampa PDF

In questo articolo proponiamo una breve guida che ricorda i comandi che , in un sistema linux, sono usati per la gestione dei processi:

Come prima cosa diciamo che l'ambiente di lavoro di cui tratteremo sarà la shell di comando, in cui inseriremo direttamente i comandi oppure eseguiremo degli script bash in cui verrà elencata una lista di comandi da eseguire.

Per provare il funzionamento delle varie sintassi useremo in comando gedit, che in ambiente GNU linux lancia un editor di testo.

$ gedit

Se dalla shell lancio il comando gedit, viene mandato in esecuzione il rispettivo editor, lasciando però la mia shell in sospeso, dato che non potrò eseguire nessun altro comando fino a quando l'editor non verrà chiuso o terminato (Ctrl-C da console).

La prima cosa che bisognerebbe imparare è quindi come lanciare un programma in background. Per fare ciò al momento del lancio del programma basta aggiungere "&" alla fine della riga di comando:

$ gedit &
[1] 5816

In questo modo vi verrà comunicato che è il primo processo in background ed il suo codice identificativo è il 5816.

Per spostare un comando da backgroung a foreground e viceversa possiamo utilizzare 2 comandi: fg e bg.

ritornando all'esempio di prima per riportare un processo un foreground, ovvero in primo piano, potremo utilizzare il comando fg nella stessa shell dove avevamo lanciato il gedit in background. Per fare questo potremo usare il comando fg in 2 modi:

  • fg %nome_processo
  • fg numero_lista_processi_in_background

nel caso specifico sarebbero:

$ fg gedit

o

$ fg %1

oppure direttamente prendiamo l'ultimo

$ fg

Se volessimo riportare il processo in background in questo momento, quindi in runtime, potremo utilizzare il comando bg, ma dato che la shell è occupata nel processo in foreground sarà impossibile scriverci sopra. Sarà necessario quindi sospendere l'esecuzione con Ctrl-Z:

  1. premere CTRL-z (Che sospende il processo)
  2. eseguire il comando: bg (che riattiva il processo ma in background)

Dopo il Ctrl-Z avrei:

[1]+ Stopped       gedit
$ bg
[1]+ gedit &

 

Priorità

Per assegnare la priorità di un processo è possibile utilizzare il comando nice, la cui sintassi è : nice -priorità comando

La priorità è un numero compreso fra -20 (la massima priorità) e 19 (la più bassa priorità).

Solitamente per un utente è impostata a 0, quindi se scriviamo

$ nice -8 gedit

vuol dire che stiamo lanciando un programma che avrà una priorità inferiore a quella che il sistema di default gli avrebbe assegnato. Se invece volessimo aumentare la sua priorità:

$ sudo nice --8 gedit

dovremo avere le necessarie autorizzazioni, quindi solitamente si ricorre al comando sudo.

Per verificare le priorità di un processo potete usare il comando "ps -l" o "ps -lA" a seconda che abbiate lanciato il programma come un normale utente oppure come amministratore.

 

Comando nohup

Tutti i processi terminano quando il loro lavoro è finito oppure quando vengono terminati o chiusi dall'utente.

bisogna però far notare che per quanto riguarda i programmi in foreground, essi rimarranno in vita fino a che la  shell rimarrà aperta e l'utente connesso.

I processi in background invece possono fare a meno della shell aperta, ma l'utente che li ha lanciati deve rimanere connesso.

Ora per creare un processo che non termini anche se l'utente si disconnette, potremo usare il comando nohup:

$ nohup comando &

naturalmente non è valido per applicazioni che dipendono dall'interfaccia grafica , in questo caso gdm, perché la finestra verrebbe comunque chiusa.

 

Jobs

Giusto per essere chiari, fino ad ora abbiamo usato una shell per lanciare dei comandi, i processi creati di conseguenza, apparterranno a questa shell, infatti non potrò usarne un altra per modificarne lo stato di foreground o background.

 

Ogni riga di comando composta da un programma esterno viene associata ad un job. Per visualizzare lo stato dei processi in background di una shell si utilizza il comando jobs. Nella lista il segno + indicherà il job corrente.

Ultimo aggiornamento ( Venerdì 18 Giugno 2010 04:35 )