Come eseguire e controllare i processi in background su Linux
Fatmawati Achmad Zaenuri/Shutterstock.com
Usa la shell Bash in Linux per gestire i processi in primo piano e in background. Puoi utilizzare le funzioni e i segnali di controllo del lavoro di Bash per darti maggiore flessibilità nel modo in cui esegui i comandi. Ti mostriamo come.
Tutto sui processi
Ogni volta che un programma viene eseguito in un sistema operativo Linux o Unix, viene avviato un processo. Processo è il nome della rappresentazione interna del programma in esecuzione nella memoria del computer. C'è un processo per ogni programma attivo. In effetti, esiste un processo per quasi tutto ciò che è in esecuzione sul tuo computer. Ciò include i componenti del tuo ambiente desktop grafico (GDE) come GNOME o DOVE e sistema demoni che vengono lanciati all'avvio.
Come mai quasi tutto ciò che è in esecuzione? Bene, i built-in di Bash come cd , pwd , e alias non è necessario che un processo venga avviato (o generato) quando vengono eseguiti. Bash esegue questi comandi all'interno dell'istanza della shell Bash in esecuzione nella finestra del terminale. Questi comandi sono veloci proprio perché non hanno bisogno di avere un processo avviato per essere eseguiti. (Puoi digitare |_+_| in una finestra di terminale per vedere l'elenco dei built-in di Bash.)
I processi possono essere eseguiti in primo piano, nel qual caso prendono il controllo del tuo terminale fino al completamento, oppure possono essere eseguiti in background. I processi eseguiti in background non dominano la finestra del terminale e puoi continuare a lavorarci. O almeno, non dominano la finestra del terminale se non generano l'output dello schermo.
Un esempio disordinato
Inizieremo un semplice |_+_| traccia in esecuzione . Stiamo andando a |_+_| il dominio How-To Geek. Questo verrà eseguito come un processo in primo piano.
help
Annuncio pubblicitario
Otteniamo i risultati attesi, scorrendo verso il basso la finestra del terminale. Non possiamo fare nient'altro nella finestra del terminale mentre |_+_| sta correndo. Per terminare il comando premi |_+_|.
ping
L'effetto visibile del |_+_| è evidenziato nello screenshot. |_+_| fa un breve riassunto e poi si ferma.
Ripetiamolo. Ma questa volta colpiremo |_+_| invece di |_+_|. L'attività non verrà terminata. Diventerà un compito in background. Otteniamo il controllo della finestra del terminale restituita a noi.
ping
ping
L'effetto visibile di colpire |_+_| è evidenziato nello screenshot.
Questa volta ci viene detto che il processo è stato interrotto. Interrotto non significa terminato. È come un'auto al segnale di stop. Non l'abbiamo rottamato e buttato via. È ancora sulla strada, fermo, in attesa di partire. Il processo è ora uno sfondo lavoro .
Il |_+_| comando elencherà i lavori che sono stati avviati nella sessione del terminale corrente. E poiché i lavori sono (inevitabilmente) processi, possiamo anche usare |_+_| comando di vederli. Usiamo entrambi i comandi e confrontiamo i loro output. Useremo il |_+_| opzione (terminale) opzione per elencare solo i processi in esecuzione in questa finestra di terminale. Nota che non è necessario utilizzare un trattino |_+_| con il |_+_| opzione.
Ctrl+C
Ctrl+C
Il |_+_| comando ci dice:
- Mettere un processo in secondo piano.
- Ripristino del processo in esecuzione in background.
- Riportare il processo in primo piano.
- Terminare il processo.
- riga di comando & : Aggiunta di una e commerciale |_+_| alla fine di una riga di comando esegue quel comando come attività in background, che è in esecuzione.
- & rsaquo; Come utilizzare i filtri Wireshark su Linux
- & rsaquo; Come uccidere i processi Zombie su Linux
- › Come trovare il tuo Spotify Wrapped 2021
- & rsaquo; Cyber Monday 2021: le migliori offerte tecnologiche
- & rsaquo; Cyber Monday 2021: le migliori offerte Apple
- › La cartella del computer è 40: come la star di Xerox ha creato il desktop
- › 5 siti Web che ogni utente Linux dovrebbe aggiungere ai segnalibri
- › Funzioni e formule in Microsoft Excel: qual è la differenza?
Il |_+_| comando ci dice:
Questi sono valori comuni per la colonna STAT:
Il valore nella colonna STAT può essere seguito da uno di questi indicatori aggiuntivi:
Possiamo vedere che Bash ha uno stato di |_+_|. La S maiuscola ci dice che il guscio Bash sta dormendo ed è interrompibile. Non appena ne avremo bisogno, risponderà. La s minuscola ci dice che la shell è un leader di sessione.
Il comando ping ha uno stato |_+_|. Questo ci dice che |_+_| è stato interrotto da un segnale di controllo del lavoro. In questo esempio, quello era il |_+_| lo mettevamo in sottofondo.
Il |_+_| il comando ha uno stato |_+_|, che sta per esecuzione. Il |_+_| indica che questo processo è un membro del gruppo in primo piano. Quindi il |_+_| comando è in esecuzione in primo piano.
Il comando bg
Il |_+_| comando viene utilizzato per riprendere un processo in background. Può essere utilizzato con o senza un numero di lavoro. Se lo usi senza un numero di lavoro, il lavoro predefinito viene portato in primo piano. Il processo viene ancora eseguito in background. Non è possibile inviare alcun input ad esso.
Se emettiamo il |_+_| comando, riprenderemo il nostro |_+_| comando:
ping
Annuncio pubblicitario
Il |_+_| il comando riprende e vediamo ancora una volta l'output a scorrimento nella finestra del terminale. Viene visualizzato il nome del comando che è stato riavviato. Questo è evidenziato nello screenshot.
Ma abbiamo un problema. L'attività è in esecuzione in background e non accetterà input. Allora come lo fermiamo? |_+_| non fa niente. Possiamo vederlo quando lo digitiamo, ma l'attività in background non riceve quelle sequenze di tasti, quindi continua a eseguire il ping allegramente.
In effetti, ora siamo in una strana modalità mista. Possiamo digitare nella finestra del terminale ma ciò che scriviamo viene rapidamente spazzato via dall'output a scorrimento del |_+_| comando. Tutto ciò che digitiamo ha effetto in quanto sopra.
Per interrompere la nostra attività in background, dobbiamo portarla in primo piano e quindi interromperla.
Il comando fg
Il |_+_| comando porterà un'attività in background in primo piano. Proprio come il |_+_| comando, può essere utilizzato con o senza numero di lavoro. Usarlo con un numero di lavoro significa che funzionerà su un lavoro specifico. Se viene utilizzato senza un numero di lavoro, viene utilizzato l'ultimo comando inviato in background.
Se digitiamo |_+_| il nostro |_+_| comando verrà portato in primo piano. I caratteri che digitiamo sono confusi con l'output del |_+_| comando, ma sono gestiti dalla shell come se fossero stati inseriti nella riga di comando come al solito. E infatti, dal punto di vista della shell Bash, è esattamente quello che è successo.
Ctrl+Z
Annuncio pubblicitario
E ora che abbiamo il |_+_| comando in esecuzione in primo piano ancora una volta, possiamo usare |_+_| per ucciderlo.
Ctrl+C
Dobbiamo inviare i segnali giusti
Non era esattamente carino. Evidentemente l'esecuzione di un processo in background funziona meglio quando il processo non produce output e non richiede input.
Ma, disordinato o no, il nostro esempio ha funzionato:
Quando usi |_+_| e |_+_| , stai inviando segnali al processo. Questi sono modi abbreviati di usare il |_+_| comando. Ci sono 64 segnali diversi che |_+_| Posso inviare. Usa |_+_| alla riga di comando per elencarli. |_+_| non è l'unica fonte di questi segnali. Alcuni di essi vengono generati automaticamente da altri processi all'interno del sistema
Ecco alcuni di quelli comunemente usati.
Dobbiamo usare |_+_| comando per emettere segnali a cui non sono assegnate combinazioni di tasti.
Ulteriore controllo del lavoro
Un processo è passato in secondo piano usando |_+_| viene posto nello stato di arresto. Dobbiamo usare |_+_| comando per riavviarlo. Avviare un programma come un processo in esecuzione in background è semplice. Aggiungi una e commerciale |_+_| alla fine della riga di comando.
Sebbene sia meglio che i processi in background non scrivano nella finestra del terminale, useremo esempi che lo fanno. Abbiamo bisogno di avere qualcosa negli screenshot a cui possiamo fare riferimento. Questo comando avvierà un ciclo infinito come processo in background:
Annuncio pubblicitariomentre vero; do echo How-To Geek Loop Processo; dormire 3; fatto &
Ci viene comunicato il numero del lavoro e l'ID processo del processo. Il nostro numero di lavoro è 1 e l'ID processo è 1979. Possiamo utilizzare questi identificatori per controllare il processo.
L'output del nostro ciclo infinito inizia ad apparire nella finestra del terminale. Come prima, possiamo usare la riga di comando ma tutti i comandi che emettiamo sono intervallati dall'output del processo di ciclo.
ls
Per fermare il nostro processo possiamo usare |_+_| per ricordarci qual è il numero di lavoro, quindi utilizzare |_+_|.
|_+_| segnala che il nostro processo è il lavoro numero 1. Per utilizzare quel numero con |_+_| dobbiamo precederlo con un segno di percentuale |_+_|.
Ctrl+Z
jobs
IMPARENTATO: Come funzionano i segnali Linux: SIGINT, SIGTERM e SIGKILL
|_+_| invia il |_+_| segnale, segnale numero 15, al processo ed è terminato. Alla successiva pressione del tasto Invio, viene mostrato lo stato del lavoro. Elenca il processo come terminato. Se il processo non risponde al |_+_| comando puoi fare un salto di qualità. Usa |_+_| con |_+_| , segnale numero 9. Basta inserire il numero 9 tra |_+_| comandare il numero di lavoro.
ps
Cose che abbiamo trattato
IMPARENTATO: Come terminare i processi dal terminale Linux
IMPARENTATO: I migliori laptop Linux per sviluppatori e appassionati
LEGGI SUCCESSIVODave McKay ha usato per la prima volta i computer quando era in voga il nastro di carta perforata, e da allora ha programmato. Dopo oltre 30 anni nel settore IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera ha lavorato come programmatore freelance, manager di un team internazionale di sviluppo software, project manager di servizi IT e, più recentemente, come Data Protection Officer. I suoi scritti sono stati pubblicati da howtogeek.com, cloudavvyit.com, itenterpriser.com e opensource.com. Dave è un evangelista di Linux e un sostenitore dell'open source.
Leggi la biografia completa