Come avviare il comando Linux in background e staccare il processo nel terminale

Come avviare il comando Linux in background e staccare il processo nel terminale
In questa guida, impareremo come eseguire un comando in background e come staccare i processi dal terminale.

Prerequisiti:

Per eseguire i passaggi in questa guida, sono necessari i seguenti componenti:

  • Un sistema Linux funzionale. Ulteriori informazioni sull'impostazione di una VM Ubuntu su VirtualBox.
  • Accesso a un utente non root con autorizzazione sudo.

Esecuzione dei processi dal terminale

Ogni volta che eseguono un comando, i processi vengono generati sotto il terminale. Se il terminale è chiuso, tutti i processi associati vengono automaticamente terminati. In alcune situazioni, può essere scomodo. Per esempio:

  • Quantità schiacciante di dati di output ed errori/messaggi diagnostici
  • Chiusura accidentale del terminale che provoca la cessazione di processi potenzialmente mission-critical, ecc.

Per affrontare questi problemi, ci sono un paio di opzioni:

  • Eseguendo i processi in background
  • Distacco i processi dal terminale

I processi che eseguono in background non sopraffanno l'output del terminale. Inoltre, il terminale è gratuito per eseguire i comandi aggiuntivi. Per i processi distaccati, non terminerà anche se il terminale è chiuso.

Avvio dei processi in background

In molti casi, un comando può richiedere un po 'di tempo per completare. In generale, l'utente è costretto ad aspettare fino alla fine del comando. Ad esempio, quando si utilizza un editor di testo, la shell non è disponibile fino alla chiusura dell'editor.

Per dimostrare, utilizziamo il comando "Sì":

$ uomo sì

Metodo 1:

Ci sono un paio di modi in cui possiamo inviare il processo di esecuzione in background.

Innanzitutto, fermiamo il processo senza terminarlo. Per fare ciò, eseguire il seguente comando e premere "Ctrl + Z":

$ Sì "Hello World"> /Dev /Null

Ora, esegui il comando "BG" per inviare il processo in background:

$ bg

Una volta spinto sullo sfondo, il processo riprende. Il seguente comando elenca tutti i lavori in esecuzione in background:

$ posti di lavoro

Metodo 2:

Nel metodo precedente, il processo ha iniziato a funzionare in primo piano. Abbiamo messo in pausa il processo, lo abbiamo inviato in background, quindi abbiamo ripreso. Invece, possiamo eseguire il processo direttamente in background.

Per fare ciò, aggiungi il segno "&" alla fine del comando:

$ Sì "Oh Long Johnson"> /Dev /Null &

Qui, i processi generati vengono eseguiti automaticamente in background. Per verificare, controlla l'elenco dei lavori in background:

$ posti di lavoro

Metodo 3:

Possiamo anche lanciare i processi in background con l'aiuto di TMUX, un potente multiplexer in grado di gestire più sessioni di terminale all'interno di una singola finestra. Non viene preinstallato in Linux. Tuttavia, è disponibile per tutte le principali distro Linux. Ulteriori informazioni sull'installazione di TMUX su Linux.

Nel seguente esempio, utilizziamo TMUX per eseguire il ping di un target e registrare l'output:

$ tmux new -d 'ping -c 9 127.0.0.1> ping.tronco d'albero'

Il file di registro verifica se il comando viene eseguito correttamente o no:

$ cat ping.tronco d'albero

È solo un esempio di ciò che TMUX può fare. Ulteriori informazioni su TMUX con esempi.

Restituire i lavori in primo piano

Se desideri restituire un lavoro in primo piano, utilizziamo il comando "FG". Abbiamo anche bisogno del numero di lavoro dal comando di lavoro.

Innanzitutto, determina il lavoro che vuoi portare in primo piano:

$ posti di lavoro

Ora usa il comando "FG":

$ fg %

Distacco i processi dal terminale

Qualsiasi processo associato a un terminale viene terminato una volta che il terminale si chiude, sia che sia in primo piano o in background. Per evitare la terminazione del processo, dissociassiamo il processo di destinazione dal terminale/shell.

Metodo 1:

Per rinnegare un processo, abbiamo prima bisogno di un processo di fondo:

$ Sì "Qwerty"> /dev /null &

Controlla l'elenco dei lavori in background in esecuzione:

$ posti di lavoro

Nota il numero di serie del lavoro di sfondo target. Ora, usa il comando "rinnegato" per staccarlo dal terminale:

$ rinnegare %

Il lavoro target dovrebbe ora scomparire dall'elenco dei lavori:

$ posti di lavoro

Tuttavia, puoi ancora vedere il processo in esecuzione in background:

$ ps aux

Metodo 2:

Un altro modo per staccare un processo dal terminale principale è l'utilizzo del comando "Nohup". Mantiene un processo in esecuzione in background anche dopo aver chiuso il terminale.

L'uso di "Nohup" è il seguente:

$ nohup E

Verifica se il lavoro viene creato correttamente:

$ posti di lavoro

Metodo 3:

Questo metodo stacca completamente il processo target. È un modo più efficace per staccare le app GUI.

Ad esempio, per avviare Firefox e staccarlo completamente dal terminale, utilizzare il comando seguente:

$ Firefox /dev/null &

Qui:

  • IL /dev/null è un dispositivo speciale in Linux che si sbarazza di tutti i dati scritti ad esso.
  • Nel comando precedente, l'ingresso viene letto da e l'output viene inviato a /dev/null. Ulteriori informazioni sugli altri modi di usare /dev /null.

Conclusione

Abbiamo dimostrato i vari modi di eseguire un processo in background. Abbiamo anche messo in mostra i modi per staccare un processo dal terminale madre. Queste tecniche possono essere utili ogni volta che lavorano con il terminale o esegue uno script.

Se è necessario eseguire determinati comandi in uno schema specifico, possiamo scaricarlo come servizio SystemD. Per le macchine remote, possiamo anche usare gli strumenti di terze parti come Ansible per automatizzare quasi tutto.

Felice calcolo!