Questa domanda ha messo a punto piuttosto un sacco ( davvero molto ), ma mi sto trovando le risposte ad essere generalmente incompleta. La domanda generale è "Perché il mio lavoro viene / non viene ucciso quando esco / uccido ssh?", Ed ecco cosa ho trovato. La prima domanda è: quanto sono generali le seguenti informazioni? Quanto segue sembra essere vero per il moderno Debian Linux, ma mi mancano alcuni bit; e cosa devono sapere gli altri?
Tutti i processi figlio, in background o meno di una shell aperta su una connessione ssh, vengono interrotti con SIGHUP quando la connessione ssh viene chiusa solo se l'
huponexit
opzione è impostata: eseguishopt huponexit
per vedere se questo è vero.Se
huponexit
è vero, allora puoi usarenohup
odisown
dissociare il processo dalla shell in modo che non venga ucciso quando esci. Oppure, esegui le cose conscreen
.Se
huponexit
è falso, che è l'impostazione predefinita su almeno alcuni Linux in questi giorni, i lavori in background non verranno interrotti al logout normale.Ma anche se
huponexit
è falso, allora se la connessione ssh viene uccisa , o scende (diverso dal normale logout), i processi in background verranno comunque uccisi. Questo può essere evitato dadisown
onohup
come in (2).Vi è una certa distinzione tra (a) processi il cui processo padre è il terminale e (b) processi che hanno stdin, stdout o stderr collegati al terminale . Non so cosa succede ai processi che sono (a) e non (b) o viceversa.
Domanda finale: come posso evitare il comportamento (3)? In altre parole, per impostazione predefinita nei processi in background Debian corrono allegramente da soli dopo il logout ma non dopo che la connessione ssh viene interrotta. Vorrei che accadesse la stessa cosa ai processi indipendentemente dal fatto che la connessione fosse chiusa normalmente o interrotta. Oppure è una cattiva idea?
Modifica: un altro modo importante per mantenere i lavori da uccidere, che funziona (?) In entrambi i casi è eseguirli attraverso lo schermo . Ma la domanda è di più sulla comprensione di quando le cose vengono uccise e quando non lo fanno: a volte le persone vogliono che i lavori vengano uccisi al logout, ad esempio.
Altre discussioni: - Chiarimento su segnali (sospiro), lavori e terminale di controllo - /server/117152/do-background-processes-get-a-sighup-when-logging-off - Continua SSH attività / lavori in background alla chiusura di SSH - Un lavoro messo in background continuerà a essere eseguito dopo la chiusura di una sessione SSH? - Impedire l'arresto di un processo in background già in esecuzione dopo la chiusura del client SSH - Come posso avviare un processo su SSH in modo tale che continuerà a funzionare dopo la disconnessione? - Impossibile mantenere il lavoro remoto in esecuzione su OS X - Chiudere la connessione SSH