Comando fg in Bash: portare un job in primo piano
fg porta in primo piano un job in background o sospeso della shell Bash corrente. Il job può così tornare a interagire con il terminale; la shell aspetta che termini o venga nuovamente sospeso prima di mostrare il prompt.
Un job è un’attività gestita dalla shell e può comprendere più processi, come in una pipeline. Sceglilo con il numero mostrato da jobs: %1 indica il job numero 1 della shell corrente, non un identificatore di processo (PID) da usare in qualsiasi terminale.
Sintassi di base
fg [%numero_job]
Gli esempi riguardano il comando incorporato in Bash con il controllo dei job abilitato, normalmente in una sessione interattiva. Consulta help fg nella versione installata. Senza argomenti, fg sceglie il job che Bash considera corrente: controllalo prima di procedere.
Esempi pratici
Controllare i job della shell
Per una prova semplice, avvia sleep 60 & in una sessione Bash interattiva. Subito dopo, nello stesso terminale, controlla numero, stato e comando con:
jobs -l
Ci si aspetta una riga Running relativa allo sleep finché non termina. Se non compare o la shell contiene altri job, non presumere che il numero corretto sia 1: usa quello associato alla tua attività di prova.
Portare un job in primo piano
Sostituisci %1 con il numero appena verificato. Fg non avvia una nuova copia dello sleep: passa in primo piano quello già esistente.
fg %1
Con sleep, il terminale può non mostrare altro oltre al nome del comando. Il prompt resta in attesa fino alla fine: l’assenza di output non indica da sola un blocco. Non digitare il successivo comando jobs finché non hai riottenuto il prompt.
Sospendere, interrompere e ricontrollare
Con la normale configurazione del terminale, Ctrl+Z sospende il job in primo piano e restituisce il prompt. Ctrl+C invia normalmente SIGINT, un segnale di interruzione che il programma può gestire; non è una garanzia universale di terminazione. Sullo sleep di prova puoi aspettare la conclusione o interromperlo, poi controllare:
jobs
Dopo Ctrl+Z ci si aspetta Stopped. Un job terminato può essere notificato e poi rimosso dall’elenco. La sospensione conserva l’attività: per riprenderla senza tenere occupato il terminale, consulta il comando bg e i limiti dell’input in background.
Riprendere un programma interattivo
La sequenza seguente consulta i job e porta quello scelto in primo piano. Richiede un job già presente nella stessa shell; controlla la prima riga e modifica il numero prima di eseguire fg.
jobs
fg %1
Per esempio, se Vim è installato, puoi aprire un file di prova con vim notes.txt, sospenderlo con Ctrl+Z e riprenderlo con fg usando il suo numero effettivo. Scegli una cartella di prova e non sovrascrivere un file importante. Al ritorno in primo piano dovrebbe riapparire l’interfaccia dell’editor: visualizzazione e tempo di ritorno dipendono dal programma, quindi non esiste una singola riga di output valida per tutti i casi.
Per concludere la prova in Vim, premi Esc e usa :wq seguito da Invio per salvare e uscire, oppure :q! seguito da Invio per scartare le modifiche e uscire dal file di prova. Ctrl+Z lascia invece un editor sospeso; Ctrl+C può essere gestito dall’applicazione e non sostituisce necessariamente il comando di uscita.
Fg attende il job e ne restituisce lo stato. Un valore diverso da zero può essere l’esito del programma portato in primo piano, non soltanto un errore di selezione di fg. Per controllarlo, leggi subito $? quando il prompt torna disponibile, prima di eseguire altri comandi che lo sostituiscano.
Forme per scegliere il job
| Forma | Significato in Bash |
|---|---|
%N |
Seleziona il job numero N della shell corrente. |
%+ |
Seleziona il job corrente, marcato con +. |
%- |
Seleziona il job precedente, marcato con - quando presente. |
| Nessun argomento | Seleziona il job che Bash considera corrente. |
N è un segnaposto: per il job 2 useresti fg %2. I marcatori corrente e precedente cambiano con le attività della shell; “corrente” non significa che il programma sia già in primo piano. Controlla nome e numero per evitare di riprendere il job sbagliato.
Condizioni e limiti del comando
Fg non prende il controllo di un processo arbitrario appartenente a un altro terminale. Se il job è terminato, la specifica è errata o il job non è gestito con il controllo dei job, verifica il messaggio di errore e l’elenco della stessa shell. Negli script e nelle altre sessioni non interattive il controllo dei job è normalmente disabilitato.
Portare un’attività in primo piano non garantisce che continui dopo la chiusura del terminale. Se un lavoro lungo deve sopravvivere alla sessione, valuta una sessione tmux o il gestore dei servizi appropriato; fg serve a gestire il primo piano nella shell corrente.
La verifica disponibile ha usato Git Bash 5.3.9 su Windows con il controllo dei job abilitato in due shell isolate. Fg ha atteso la conclusione di un’attività che restituiva 7 e ha restituito lo stesso valore; ha inoltre ripreso uno sleep sospeso mediante un segnale diretto al solo PID di prova, attendendone la conclusione con stato zero. Entrambe le attività sono state raccolte e rimosse dall’elenco. Non sono stati verificati un editor interattivo, i tasti fisici Ctrl+Z e Ctrl+C o il controllo del terminale Linux.
Domande frequenti
In fg %1, %1 è il PID?
No. È la specifica del job numero 1 nella shell corrente. Usa il numero mostrato da jobs per il comando desiderato; i PID visualizzati con jobs -l identificano invece processi del sistema e non sostituiscono automaticamente le specifiche di fg.
Documentazione di riferimento
Il manuale Bash del progetto, sezione Job Control Builtins descrive fg, requisiti e stato restituito. La sezione Job Control Basics spiega primo piano, segnali da tastiera e specifiche dei job; confronta queste regole con help fg nella shell usata.




