Se hai davvero un lavoro in primo piano, allora bash sta aspettando che venga completato, è più o meno la definizione di un lavoro in primo piano . Se bash ha ancora il controllo del terminale, controlla cosa sta succedendo jobs -l, ad esempio:
$ ncat -kl -p 10111 &
[1] 13404
$ ncat -kl -p 10222 &
[2] 13405
$ ncat -kl -p 10333 &
[3] 13406
$ jobs -l
[1] 13404 Running ncat -kl -p 10111 &
[2]- 13405 Running ncat -kl -p 10222 &
[3]+ 13406 Running ncat -kl -p 10333 &
Per questo ho avviato tre ncatprocessi di ascolto in background . È inoltre possibile che venga visualizzato "Fine" o "Interrotto" per lo stato di un processo.
È possibile eseguire in background un lavoro in primo piano da una shell diversa utilizzando il metodo SIGSTOP / SIGCONT di Stefan Seidel (sebbene il segnale effettivo inviato da una shell con Ctrl- Zsia SIGTSTP, entrambi i segnali dovrebbero funzionare).
Esiste una sottile distinzione tra processi e lavori quando vengono utilizzati i termini primo piano e sfondo. Esiste un solo processo di primo piano della shell , possono esserci più processi di primo piano (ciò è correlato agli ID dei gruppi di processi del terminale e può essere osservato quando si avviano due o più processi in una pipeline).
Un processo in esecuzione o una pipeline sotto il controllo della shell viene definito "lavoro", quando si utilizza il comando bgo fgsi fa riferimento implicito al lavoro più recente, nel mio caso quello con +il precedente. Questi lavori possono anche (tra le altre cose) essere definiti esplicitamente come% 1% 2 o% 3 (il numero in []).
Un fgcomando non qualificato avrà effetto solo su un lavoro, il più recente, quindi potresti sbagliarti nella comprensione della situazione attuale. Un lavoro in background può ancora scrivere sul terminale:
echo foo > /dev/tcp/127.0.0.1/10111
Può dipendere da come il programma gestisce il terminale, ncatfunziona bene per la scrittura. Per leggere però i programmi interromperanno l'esecuzione e vedrai un messaggio "Interrotto". La shell avvierà i processi e aspetterà che escano o ricevano un segnale SIGTTIN ( nohupè un modo per aggirare questo, così com'è disown).
È possibile eseguire il background di un lavoro interrotto specifico con
$ bg %3
(nel mio caso visualizzerò l'errore bash: bg: job 3 already in background)
Altrimenti se un processo è in primo piano, a meno che il programma non catturi SIGTSTP e faccia qualcosa di speciale, è improbabile che si verifichino problemi con un veloce Ctrl- Ze bg. Non c'è nulla di speciale nei programmi di rete in questo senso, le connessioni / i dati in entrata saranno bufferizzati dal kernel (fino a un certo punto). Una connessione di streaming può tuttavia presentare una pausa osservabile.
Vedere la sezione " CONTROLLO LAVORO " della pagina man di bash per maggiori dettagli.