Ad esempio, quando digito ping 8.8.8.8 &
, perché possiamo vedere il processo di ping funzionante? E quando digito find / -name '*test*' &
, si vede anche sul monitor.
Perché? Non è davvero in background?
Migliore risposta
Il &
indica alla shell di eseguire il comando in background, ovvero viene eseguito il fork ed eseguito in una sottoshell separata, come lavoro, in modo asincrono.
Nota che quando metti &
l'output – sia stdout che stderr – sarà ancora stampato sullo schermo . Se non vuoi vedere alcun output sullo schermo, reindirizza entrambi stdout
e stderr
in un file da:
myscript > ~/myscript.log 2>&1 &
Di solito potresti voler scartare stderr
reindirizzandolo a /dev/null
se non sei preoccupato di analizzare gli errori in un secondo momento.
Puoi anche eseguire comandi/script contemporaneamente, in subshell separate. Ad esempio;
./script1 & ./script2 & ./script3 &
Un lavoro in background può essere riportato alla riga di comando prima che termini con il comando:
fg <job-number>
Il job-number
può essere ottenuto eseguendo
jobs