Come funziona nohup?


8

La mia comprensione è che per bloccare un segnale di processo simile SIGHUP, è necessario farlo all'interno del processo a cui viene inviato il segnale. Tuttavia, una shell Unix come bashpuò generare un processo figlio e bloccare il HUPsegnale per il bambino dall'interno del genitore, usando il nohupcomando. Come funziona? Blocca nohupil segnale e quindi esegue il processo figlio senza biforcazione? Questo è l'unico modo a cui riesco a pensare.

Risposte:


7

Puoi dare un'occhiata al codice sorgente di un'implementazione di nohup, ad esempio la coreutilsversione di GNU . C'è un sacco di setup, alcuni per scopi di internazionalizzazione, il resto per gestire le varie opzioni di reindirizzamento; quindi accade il vero "nohupping":

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

Mentre supponi, questo imposta il processo in modo da ignorare il segnale HUP, quindi execs il comando richiesto.


-2

L'atto di usare nohupsemplicemente modifica il PPID del processo generato in 1 (init) in modo che quando la shell esce, non è più un processo figlio di quella shell e quindi non riceve un HUP.

EDIT: Dovrei pensare di più prima di pubblicare a volte. Lasciandolo qui per ricordarmi della mia vergogna :-(

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.