In questa guida metteremo in luce un concetto semplice ma importante nella gestione dei processi in un sistema Linux, ovvero come staccare completamente un processo dal suo terminale di controllo.
Quando un processo è associato a un terminale, potrebbero verificarsi due problemi:
- il tuo terminale di controllo è pieno di così tanti dati di output e messaggi di errore/diagnostici.
- nel caso in cui il terminale venga chiuso, il processo insieme ai suoi processi figlio verrà interrotto.
Per affrontare questi due problemi, è necessario scollegare completamente un processo da un terminale di controllo. Prima di passare effettivamente alla risoluzione del problema, esaminiamo brevemente come eseguire i processi in background.
Come avviare un processo o un comando Linux in background
Se un processo è già in esecuzione, come l'esempio del comando tar riportato di seguito, premi semplicemente Ctrl+Z
per fermarlo, inserisci il comando bg
per continuare con la sua esecuzione in background come lavoro.
Puoi visualizzare tutti i tuoi lavori in background digitando jobs
. Tuttavia, è stdin , standard , stderr sono ancora collegati al terminale.
$ tar -czf home.tar.gz . $ bg $ jobs
Puoi anche eseguire un processo direttamente in background usando la e commerciale, &
firmare.
$ tar -czf home.tar.gz . & $ jobs
Dai un'occhiata all'esempio seguente, sebbene il comando tar sia stato avviato come lavoro in background, al terminale è stato comunque inviato un messaggio di errore, il che significa che il processo è ancora connesso al terminale di controllo.
$ tar -czf home.tar.gz . & $ jobs
Mantieni i processi Linux in esecuzione dopo l'uscita da Terminal
Useremo rinnego comando, viene utilizzato dopo che il processo a è stato avviato e messo in background, il suo lavoro consiste nel rimuovere un lavoro della shell dall'elenco dei lavori attivi della shell, quindi non utilizzerai fg
, bg
comandi su quel particolare lavoro.
Inoltre, quando chiudi il terminale di controllo, il lavoro non si bloccherà né invierà un SIGHUP a qualsiasi lavoro per bambini.
Lettura consigliata: 5 modi per mantenere in esecuzione sessioni e processi SSH remoti
Diamo un'occhiata al seguente esempio di utilizzo di disvinto funzione incorporata bash.
$ sudo rsync Templates/* /var/www/html/files/ & $ jobs $ disown -h %1 $ jobs
Puoi anche usare nohup
comando, che consente anche a un processo di continuare a essere eseguito in background quando un utente esce da una shell.
$ nohup tar -czf iso.tar.gz Templates/* & $ jobs
Staccare un processo Linux dal terminale di controllo
Pertanto, per scollegare completamente un processo da un terminale di controllo, utilizzare il formato di comando riportato di seguito, questo è più efficace per l'interfaccia utente grafica (GUI ) applicazioni come Firefox:
$ firefox </dev/null &>/dev/null &
In Linux, /dev/null è un file di dispositivo speciale che cancella (elimina) tutti i dati scritti su di esso, nel comando precedente, l'input viene letto e l'output viene inviato a /dev/null .
Lettura consigliata: 10 Esempi di comandi dello schermo per scollegare le sessioni del terminale
Come osservazione conclusiva, a condizione che un processo sia collegato a un terminale di controllo, come utente vedrai diverse righe di output dei dati di processo e messaggi di errore sul tuo terminale. Anche in questo caso, quando chiudi il terminale di controllo, il tuo processo e i processi secondari verranno terminati.
È importante sottolineare che per qualsiasi domanda o commento sull'argomento, contattaci utilizzando il modulo di commento qui sotto.