Comando jobs in Bash: elencare i job della shell corrente
jobs mostra i job in background e sospesi gestiti dalla shell Bash corrente. Un job è un’attività avviata dalla shell e può comprendere più processi; l’elenco non coincide con quello dei processi del sistema.
Per confrontare i due ambiti, consulta anche la guida al comando ps: ps può interrogare i processi del sistema secondo i criteri selezionati. Un programma avviato da un altro terminale può comparire in ps senza appartenere alla tabella dei job di questa shell.
Sintassi di base
jobs [opzioni] [specifica_del_job]
La guida si riferisce al comando incorporato in Bash. Controlla help jobs nella shell usata: un altro interprete può offrire opzioni diverse. Senza una specifica, jobs elenca i job conosciuti dalla shell; con jobs %1 limita l’output al job numero 1, se esiste.
Esempi pratici
Avviare un job in background
Apri una sessione Bash e prova questi comandi nello stesso terminale. Il simbolo finale & avvia il comando in modo asincrono, lasciando disponibile la shell. sleep attende il numero di secondi indicato senza produrre normalmente output.
sleep 120 &
Controllare i job della shell corrente
Esegui il controllo prima che trascorrano i 120 secondi. L’elenco indica numero del job, stato e comando; in una shell interattiva può essere già apparso un avviso di avvio con numero e PID.
jobs
Visualizzare anche i PID
L’opzione -l aggiunge gli identificatori dei processi. Il numero del job è locale alla shell e non va confuso con un PID assegnato dal sistema.
jobs -l
Come leggere numeri, stato e comando
Questo secondo esempio avvia un altro sleep nella stessa shell. Se il primo è ancora attivo, compariranno entrambi: il nuovo job non avrà necessariamente il numero 1.
sleep 60 &
jobs -l
Una possibile riga di output è la seguente. Numeri, spaziatura e marcatori possono variare; 12345 è un PID illustrativo.
[1]+ 12345 Running sleep 60 &
[1] identifica il job numero 1, richiamabile come %1. Il segno + indica il job corrente per il controllo dei job; -, se presente, indica quello precedente. Running significa che il job non è sospeso: non certifica l’uso continuo della CPU né lo stato di salute di un servizio.
Nel caso semplice mostrato, il job contiene un solo processo sleep e il numero successivo è il suo PID. Una pipeline può invece comprendere più processi nello stesso job; non interpretare il numero del job come un PID valido in qualsiasi terminale.
Bash può notificare la conclusione con uno stato come Done e poi rimuovere il job dalla tabella. Un elenco vuoto non dimostra quindi che non esistano altri processi. Per controllare il risultato di un tuo comando asincrono in uno script, conserva il PID ottenuto da $! subito dopo l’avvio e usa wait secondo la gestione degli errori prevista dallo script.
Opzioni principali
| Opzione | Comportamento in Bash |
|---|---|
-l |
Aggiunge i PID alle normali informazioni sullo stato. |
-p |
Mostra solo il PID del leader del gruppo di processi del job. |
-r |
Mostra solo i job in esecuzione, non sospesi. |
-s |
Mostra solo i job sospesi. |
Per esempio, jobs -r restringe l’elenco ai job in esecuzione. Con una pipeline, jobs -p non è un elenco di tutti i suoi processi. Non presumere che il PID mostrato da -p coincida sempre con $!, che per una pipeline asincrona identifica l’ultimo comando.
Nella forma di consultazione qui illustrata, Bash restituisce stato zero salvo opzioni o specifiche del job non valide. Anche un elenco vuoto può avere esito zero: il codice di uscita di jobs non è il risultato dei programmi elencati. Esiste inoltre la forma jobs -x, che esegue un comando dopo aver sostituito le specifiche dei job; non è una semplice consultazione.
Precauzioni e conclusione della prova
Un nuovo processo Bash, un’altra finestra del terminale o un comando eseguito tramite un sistema di automazione ha una propria tabella. Esegui jobs nella stessa shell che ha avviato l’attività. Negli script il controllo dei job è normalmente disattivato: la gestione interattiva con fg, bg e gruppi di processi non va data per disponibile, anche se jobs può mostrare i comandi asincroni avviati dalla shell.
Per terminare la prova puoi semplicemente aspettare la fine degli sleep. Se vuoi interrompere prima un tuo job, controlla di nuovo numero e comando con jobs -l e invia la richiesta con kill %1, sostituendo %1 con il numero effettivo. Il comando invia SIGTERM al job individuato: non usarlo alla cieca in una sessione con altre attività. Per una pipeline può coinvolgere più processi. Verifica poi la conclusione; l’invio del segnale non equivale ad aver già completato l’arresto.
Avviare un comando con & non garantisce che continui dopo la chiusura del terminale. Se deve sopravvivere alla sessione, valuta nohup con input e output opportunamente reindirizzati, una sessione tmux o il gestore dei servizi. Jobs resta uno strumento per la tabella della shell corrente.
La prova disponibile è stata eseguita con Git Bash 5.3.9 su Windows: sono stati avviati sleep di 120 e 60 secondi e controllati elenco, PID e filtri, poi i soli processi di prova sono stati terminati e raccolti con wait. Questo controllo non verifica il comportamento del terminale Linux né la sospensione e ripresa interattiva dei job.
Domande frequenti
Perché jobs è vuoto mentre ps mostra dei processi?
Jobs consulta soltanto la tabella della shell corrente. I processi possono appartenere ad altre sessioni o non essere più registrati come suoi job; ps interroga invece i processi secondo i propri criteri di selezione. Un elenco jobs vuoto non significa che il sistema sia privo di processi.
Documentazione di riferimento
Il manuale Bash mantenuto dal progetto, sezione Job Control Builtins descrive jobs e le sue opzioni. La sezione Job Control Basics dello stesso manuale chiarisce numeri dei job, gruppi di processi e marcatori corrente e precedente; confronta queste indicazioni con help jobs nella versione installata.




