Processi Unix – Lancio in background

Usando la shell di una qualunque versione di Unix (Linux nelle varie distro, BSD, AIX, HPUX, fate voi) è sempre possibile lanciare dei processi in background.

Background significa che il programma lanciato non ha iterazione con l’utente, lavora prelevando informazioni da file o db e restituisce informazioni usando gli stessi canali. Lanciare in background un programma che usa una finestra grafica (GUI) è, sostanzialmente, inutile.

Per lanciare un comando in background è possibile digitare

nomecomando &

Per esempio nc -l localhost 8000 &

Il comando nc (netcat) così usato crea una emulazione di un servizio tcp/ip su porta 8000.

A questo punto, per poter vedere che il nostro programma davvero è in esecuzione in background si digita:

ps -ef | grep nc

Comando che, per i puristi di linux sembra strano, ma che funziona, in modo identico, in tutte le versioni di Unix. I linuxari usano preferibilmente i parametri ps -aux|grep, per ottenere, più o meno, la stessa cosa.

Il comando restituisce la lista dei processi che hanno nel loro nome la stringa nc:

root 449 1 0 Apr09 ? 00:00:21 /usr/sbin/irqbalance –foreground
root 1398 954 0 Apr09 ? 00:00:00 gdm-session-worker [pam/gdm-launch-environment]
Debian-+ 1565 1413 0 Apr09 ? 00:00:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
cdona 1871 1738 0 Apr09 ? 00:00:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
cdona 26296 2452 0 00:01 pts/1 00:00:00 nc -l localhost
cdona 26300 2452 0 00:04 pts/1 00:00:00 grep nc

Ed ecco, in rosso, il comando in esecuzione.

A questo punto, per terminare il programma è sufficiente digitare

kill -9 26296

Usando il numerino a destra della lista. Si otterrà la terminazione del programma.

Nota 1: se chiudete la shell il programma si terminerà in automatico, il che è fastidioso se volete lanciare un lungo processo batch e volete farvi un caffè nell’attesa della sua esecuzione. Per rendere il batch insensibile alla vostra shell dovete digitare nohup nomecomando &, per esempio con nohup nc -l localhost 8000 &. Si otterrà dal sistema la risposta nohup: ignoring input and appending output to ‘nohup.out’

questo perchè il programma non riconoscerà più il vostro terminale come canale di input ed ouput e rimarrà persistente anche se chiudete la connessione.

nohup vuol dire NO HangUP, cioè, letteralmente “caro programma, continua a rimanere in comunicazione anche se abbasso la cormetta del telefono. Un “attacca te, no te”, se siete romantici.

Nota 2: al posto del comando composto ps -ef | grep nomeprogramma per conoscere il numero di processo da terminare si può usare il più veloce pgrep nc, che ritorna la lista dei numeri di processo che eseguono il comando indicato, in questo caso nc.

Una risposta a “Processi Unix – Lancio in background”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *