Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gestire processi Linux: nohup

Come creare un processo Linux immune da SIGHUP tramite il comando nohup.
Come creare un processo Linux immune da SIGHUP tramite il comando nohup.
Link copiato negli appunti

In una precedente lezione abbiamo richiamato il concetto di background, nella lezione pubblicata subito prima di questa abbiamo invece chiarito come inviare segnali di terminazione utilizzando il comando kill. Uno dei segnali di cui abbiamo parlato è SIGHUP. Esiste un modo per rendere un processo immune al segnale SIGHUP attraverso un comando che oltre far ciò redirige l'output verso un file. Per ottenere questo effetto dobbiamo lanciare un comando come argomento di nohup. Osserveremo quanto descritto effettivamente all'opera nel terminale riportato a seguire anche se, per ragioni di praticità, andiamo a spiegare in dettaglio ciò che vedremo immediatamente.

Uso di nohup

Il comando nohup è uno dei più semplici da adoperare. Viene presentato ora perché può essere compreso appieno solo dopo le lezioni precedenti e anche perché rivela spunti interessanti su quanto sino a ora abbiamo affrontato. Innanzi tutto, adoperando ps, andiamo a consultare i processi attivi. Scopriamo che il PID 6955 è un processo che intendiamo terminare. Inviamo quindi allo stesso un segnale di SIGHUP tramite il comando kill e constatiamo sempre tramite ps che effettivamente il processo in questione è stato rimosso dalla lista dei processi attivi. A questo punto, se eseguiamo lo stesso comando che aveva generato il processo appena terminato passandolo tuttavia come argomento a nohup otterremo un processo sordo a questo specifico segnale di terminazione. Inoltre nohup sta provvedendo a redirigere lo output verso il file nohup.txt. Abbiamo la possibilità di imporre a nohup l'indirizzazione dello output verso un file diverso passando come ultimo argomento ">" seguito dal nome del file. Stiamo eseguendo nohup in background poiché l'ultimo carattere del comando con cui lo abbiamo lanciato era la "&" ma possiamo comunque visionarne lo output in tempo reale adoperando il comando tail -f che restituisce a schermo dinamicamente un file a cui vengono aggiunte in coda nuove righe.

fprincipe@html52:~$ ps -uf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
[...]
fprinci+  1979  0.0  0.5  21476  5524 pts/1    Ss+  15:08   0:00 -bash
fprinci+  6955  0.0  0.3  11592  3204 pts/1    S    16:02   0:00  \_ /bin/bash ./long.sh
fprinci+  7233  0.0  0.0   6176   796 pts/1    S    16:04   0:00      \_ sleep 1
[...]
fprinci+  1636  0.0  0.5  21288  5048 pts/0    Ss+  14:50   0:00 /bin/bash
fprinci+  1624  0.0  0.4  21460  5012 tty1     S    14:48   0:00 -bash
fprinci+  1634  0.0  0.3  30136  3220 tty1     S+   14:50   0:00  \_ screen
fprincipe@html52:~$ kill -s SIGHUP 6955
fprincipe@html52:~$ ps -uf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
fprinci+  7142  0.0  0.5  21476  5296 pts/2    Ss   16:03   0:00 -bash
fprinci+  7290  0.0  0.3  38372  3728 pts/2    R+   16:05   0:00  \_ ps -uf
fprinci+  1979  0.0  0.5  21476  5524 pts/1    Ss+  15:08   0:00 -bash
fprinci+  1807  0.0  0.4  21288  4880 pts/5    Ss   15:06   0:00 /bin/bash
fprinci+  1816  0.0  0.3  20004  3816 pts/5    S+   15:06   0:00  \_ man screen
fprinci+  1825  0.0  0.0  19740   828 pts/5    S+   15:06   0:00      \_ man screen
fprinci+  1826  0.0  0.1   8556  1104 pts/5    S+   15:06   0:00      \_ pager
fprinci+  1636  0.0  0.5  21288  5048 pts/0    Ss+  14:50   0:00 /bin/bash
fprinci+  1624  0.0  0.4  21460  5012 tty1     S    14:48   0:00 -bash
fprinci+  1634  0.0  0.3  30136  3220 tty1     S+   14:50   0:00  \_ screen
fprincipe@html52:~$ nohup ./long.sh &
[1] 7293
fprincipe@html52:~$ nohup: ignoring input and appending output to 'nohup.out'
fprincipe@html52:~$ tail -f nohup.out
[...]
Long
Long
Long
[...]
fprincipe@html52:~$ ps -uf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
[...]
fprinci+  7293  0.0  0.3  11592  3076 pts/2    S    16:06   0:00  \_ /bin/bash ./long.sh
fprinci+  7339  0.0  0.0   6176   776 pts/2    S    16:06   0:00  |   \_ sleep 1
[...]
fprincipe@html52:~$ kill -s SIGHUP 7293
fprincipe@html52:~$ ps -uf
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
fprinci+  7142  0.0  0.5  21476  5476 pts/2    Ss   16:03   0:00 -bash
fprinci+  7293  0.0  0.3  11592  3076 pts/2    S    16:06   0:00  \_ /bin/bash ./long.sh
fprinci+  7398  0.0  0.0   6176   828 pts/2    S    16:07   0:00  |   \_ sleep 1
[...]

Ti consigliamo anche