Invia un processo a Linux in background

Send Process Background Linux



Quando lavoriamo con ambienti desktop grafici, raramente ci preoccupiamo dei processi in background. Se abbiamo un processo in esecuzione in primo piano, possiamo generare rapidamente un'altra finestra di terminale e continuare con il nostro lavoro.

Tuttavia, se ti trovi in ​​una shell di terminale non elaborata come SSH, ti sentirai spesso preoccupato per i processi che occupano e bloccano la shell fino a quando non vengono completati, specialmente su lavori di lunga durata. È qui che entra in gioco il concetto di processi in background e in primo piano.







Questo tutorial discuterà quali sono i processi in background e in primo piano, inclusa la loro creazione e gestione in Linux.



Che cos'è un processo?

Permettetemi di iniziare dal livello base: che cos'è un processo?



In Linux, un processo è un'istanza di un programma. In genere, ciò significa che qualsiasi comando o eseguibile in una shell è un processo.





Esistono principalmente due tipi di processi:

  • Processi in primo piano
  • Processi in background

I processi in primo piano sono principalmente applicazioni tipiche che lanciamo e con cui interagiamo. Un esempio potrebbe essere il file manager nautilus in Gnome. Nella maggior parte dei casi, possiamo avviare processi in primo piano dalla shell o dall'ambiente desktop.



D'altra parte, i processi in background vengono eseguiti in background e non richiedono alcun input o interazione da parte dell'utente. Un esempio potrebbe essere un tipico demone Linux.

Come eseguire un processo in background

Supponiamo di avere un processo che, durante l'esecuzione, occupa la sessione della shell e ci impedisce di eseguire comandi fino alla sua uscita.

Ad esempio, se eseguiamo il browser Firefox nella shell, occuperà la sessione fino al termine del processo.

$firefox


Come puoi vedere, finché Firefox è in esecuzione, il prompt della shell non è disponibile e non possiamo eseguire altri comandi.

Per risolvere questo problema, possiamo farlo in due modi:

1: utilizzo di una e commerciale (&)

Il primo metodo utilizza la e commerciale e il segno. Questo dice alla shell di eseguire qualsiasi comando precede la e commerciale in background.

Un esempio:

firefox&

In tale scenario, il processo viene eseguito in background e viene generato come un nuovo prompt della shell che ci consente di continuare a eseguire i comandi.

Fornisce anche due identificatori numerici. Il primo racchiuso tra parentesi quadre è l'ID lavoro, mentre il successivo è l'ID processo.

2: Usando CTRL + Z, comando bg.

Il prossimo metodo che puoi usare per mettere un processo in background è usare la scorciatoia CTRL + Z. Questo impedisce al processo di bloccare la shell. Puoi quindi utilizzare il comando bg per spostarlo in background.

Ad esempio, inizia avviando Firefox come:

$Firefox

Mentre il processo è in esecuzione, premi CTRL + Z. Questo restituisce il prompt della shell. Infine, inserisci il comando bg per spingere il processo in background.

Come mostrare i processi in background

Per visualizzare e gestire i processi in background, utilizzare il comando jobs nella shell. Ciò mostrerà i lavori in background nella sessione del terminale corrente.

Per esempio:

$lavori

Un esempio di output di lavori in background:

Per portare in primo piano un processo in esecuzione in background, utilizzare il comando fg seguito dall'id del lavoro.

Ad esempio, per portare in primo piano il job di firefox, usiamo il comando:

$fg %1

Per rimettere in secondo piano, premi CTRL + Z seguito dal comando bg.

Come rendere persistente un processo dopo la morte della shell

Quando si eseguono processi in background e la sessione della shell si interrompe, tutti i processi ad essa associati terminano, il che può essere problematico, soprattutto se si tratta di una sessione SSH.

Tuttavia, questo non è un problema troppo grande se si utilizza un multiplexer di terminale come tmux o screen perché, in tal caso, è possibile semplicemente ricollegare la sessione.

Tuttavia, se esegui una sessione di shell senza un multiplexer, puoi utilizzare il comando nohup.

Il comando nohup è immune ai riattacchi e può ignorare il segnale SIGHUP inviato a un processo.

Quindi, se esegui un comando con nohup, continua a funzionare anche se la sessione della shell muore accidentalmente.

Ad esempio, per eseguire Firefox con nohup, utilizzare il comando:

nohupFirefox&

Questo eseguirà il processo in background mentre persiste una shell terminata.

Puoi eseguire una nuova sessione del terminale e visualizzare i lavori in background. Vedrai il processo ancora in esecuzione in background.

Conclusione

In questo tutorial, abbiamo discusso vari modi per eseguire e inviare processi in background in Linux. Abbiamo anche spiegato come portare un processo in background in background e come persistere il blocco al termine della shell.