GNU/Linux >> Linux Esercitazione >  >> Linux

Mantenere un processo Linux in esecuzione dopo il logout

Soluzione 1:

Il metodo migliore è avviare il processo in un multiplexer terminale. In alternativa puoi fare in modo che il processo non riceva il segnale HUP.

Un multiplexer di terminale fornisce terminali "virtuali" che funzionano indipendentemente dal terminale "reale" (in realtà tutti i terminali oggi sono "virtuali" ma questo è un altro argomento per un altro giorno). Il terminale virtuale continuerà a funzionare anche se il tuo terminale reale viene chiuso con la tua sessione ssh.

Tutti i processi avviati dal terminale virtuale continueranno a essere eseguiti con quel terminale virtuale. Quando ti riconnetti al server puoi riconnetterti al terminale virtuale e tutto sarà come se nulla fosse accaduto, a parte il tempo trascorso.

Due popolari multiplexer di terminale sono screen e tmux.

Lo schermo ha una curva di apprendimento ripida. Ecco un buon tutorial con diagrammi che spiegano il concetto:http://www.ibm.com/developerworks/aix/library/au-gnu_screen/

Il segnale HUP (o SIGHUP) viene inviato dal terminale a tutti i suoi processi figli quando il terminale è chiuso. L'azione comune dopo aver ricevuto SIGHUP è terminare. Pertanto, quando la tua sessione ssh viene disconnessa, tutti i tuoi processi termineranno. Per evitare ciò puoi fare in modo che i tuoi processi non ricevano SIGHUP.

Due semplici metodi per farlo sono nohup e disown .

Per ulteriori informazioni su come nohup e disown lavora leggi questa domanda e rispondi:https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and

Nota:anche se i processi continueranno a funzionare, non potrai più interagire con essi perché non sono più collegati a nessun terminale. Questo metodo è utile principalmente per processi batch di lunga durata che, una volta avviati, non richiedono più alcun input da parte dell'utente.

Soluzione 2:

Ci sono alcuni modi per farlo, ma quello che trovo più utile è usare GNU Screen.

Dopo aver effettuato l'accesso tramite ssh, esegui screen . Questo avvierà un'altra shell in esecuzione all'interno dello schermo. Esegui il tuo comando, quindi fai un Ctrl -a d .

Questo ti "disconnetterà" dalla sessione dello schermo. A questo punto, puoi disconnetterti o fare qualsiasi altra cosa desideri.

Quando vuoi riconnetterti alla sessione dello schermo, esegui semplicemente screen -RD dal prompt della shell (come lo stesso utente che ha creato la sessione).

Soluzione 3:

Nel bash , il disown parola chiave è perfettamente adatta a questo. Per prima cosa, esegui il tuo processo in background (usa & o ^Z quindi digita bg ):

$ wget --quiet http://server/some_big_file.zip &
[1] 1156

Digitando jobs puoi vedere che il processo è ancora di proprietà della shell:

$ jobs
[1]+  Running  wget

Se dovessi disconnetterti a questo punto, anche l'attività in background verrebbe interrotta. Tuttavia, se esegui disown , bash scollega il lavoro e ne consente la continuazione:

$ disown

Puoi confermare questo:

$ jobs
$ logout

Puoi anche combinare il & e disown sulla stessa riga, come:

$ wget --quiet http://server/some_big_file.zip & disown
$ logout

È meglio che eseguire nohup secondo me perché non lascia nohup.out file disseminati in tutto il tuo filesystem. Inoltre, nohup deve essere eseguito prima di eseguire il comando — disown può essere utilizzato se decidi solo in seguito di voler mettere in secondo piano e staccare l'attività.

Soluzione 4:

Lo strumento nohup, disponibile sulla maggior parte delle macchine Linux, farà questo.

Soluzione 5:

Giusto per essere esaustivi, indicherò tmux, che ha la stessa idea di base di screen:

tmux vuole essere una moderna alternativa con licenza BSD a programmi come GNU screen. Le caratteristiche principali includono:

  • Un'interfaccia di comando potente, coerente, ben documentata e facilmente gestibile tramite script.
  • Una finestra può essere suddivisa orizzontalmente e verticalmente in riquadri.
  • I riquadri possono essere spostati e ridimensionati liberamente o disposti in layout preimpostati.
  • Supporto per terminali UTF-8 e 256 colori.
  • Copia e incolla con più buffer.
  • Menu interattivi per selezionare finestre, sessioni o client.
  • Cambia la finestra corrente cercando il testo nella destinazione.
  • Blocco del terminale, manualmente o dopo un timeout.
  • Una base di codice pulita, facilmente estendibile, con licenza BSD, in fase di sviluppo attivo.

È, tuttavia, approssimativamente infinitamente più facile da cercare su Google.


Linux
  1. Suggerimenti Linux per l'utilizzo di GNU Screen

  2. Come riavviare (o ripristinare) un processo in esecuzione in Linux?

  3. Processo Linux in background - Arresto nei lavori?

  4. nella console linux, come NON avvolgere l'output

  5. Come faccio a sapere che sto correndo all'interno di uno schermo Linux o no?

Come elencare i processi in esecuzione in Linux

Come elencare i processi in esecuzione in Linux:una guida per principianti

15 Comando dello schermo di Linux per la gestione delle sessioni del terminale

Come eliminare l'esecuzione del processo Linux su una porta particolare

Esempi di comandi dello schermo:ottieni il controllo del terminale Linux / Unix

Come cancellare il terminale in Linux {Cancella schermo in Linux}