Processi in background (nohup + &) e foreground (JOBS, FG)

Usare nohup ed & per eseguire l’attività in background anche se si chiude il terminale.
Ad esempio per lanciare un export del database

nohup expdp  \"sys/xxxxxx as sysdba\" dumpfile=... logfile=.. ..   &

In genere è meglio mettere tutti i comandi in una shell script, diciamo comandi.sh e poi lanciare: 
nohup comandi.sh &

& manda in background il comando lanciato e, se non è utilizzato insieme al nohup, il comando lanciato, pur se attivo in backgound contemporaneamente alla shell che lo ha lanciato è comunque figlio della shell interattiva di login. Quindi se uscite dalla sessione interattiva la shell manderà il segnale di hangup (HUP) ai suoi figli, terminando tutti i processi in background.
Se invece volete che il lavoro continui anche se uscite dalla shell di login, dovete usare nohup
In questo caso il comando lanciato col nohup appena partito si stacca dal "terminale di controllo", ovvero il suo parent pid non è più la shell di login, ma 1, il programma lanciato diventa una sorta di demone "dei poveri".
Proprio per evitare che la gestione dei segnali e delle dipendenze, che potrebbero essere personalizzate nel programma lanciato che è buona norma mettere l'istruzione, o il treno di istruzioni, dentro uno script e lanciare quello. In questo modo la shell forkata farà da tramite per tutte le attività di cui sopra, evitando interferenze con il programma lanciato.

Peer visualizzare le attività in background eseguire il comando:
# jobs

Per passare da un processo in background a foreground  
fg

Per chiudere il foreground senza killare il processo
# Ctrl+c
Invece per stopparlo (killarlo)
# Ctrl+z

Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database