Ad esempio, quando digito ping 8.8.8.8 &, perché possiamo vedere il processo di ping funzionante? E quando scrivo find / -name '*test*' &, si vede anche sul monitor.
Perché? Non è davvero in background?
Ad esempio, quando digito ping 8.8.8.8 &, perché possiamo vedere il processo di ping funzionante? E quando scrivo find / -name '*test*' &, si vede anche sul monitor.
Perché? Non è davvero in background?
Risposte:
La &indirizza alla shell di eseguire il comando in background, cioè, è biforcuta e operare in un sub-shell separato, come un lavoro, in modo asincrono.
Si noti che quando si inserisce &l'output - sia stdout che stderr - verranno comunque stampati sullo schermo . Se non si desidera visualizzare alcun output sullo schermo, reindirizzare entrambi stdoute stderrsu un file:
myscript > ~/myscript.log 2>&1 &
Di solito potresti voler scartare stderrreindirizzandolo a /dev/nullse non sei preoccupato di analizzare gli errori in seguito.
Puoi anche eseguire comandi / script contemporaneamente, in sotto-shell separate. Per esempio;
./script1 & ./script2 & ./script3 &
Un lavoro in background può essere riportato alla riga di comando prima che termini con il comando:
fg <job-number>
È job-numberpossibile ottenere eseguendo
jobs
2>&1reindirizza stderra stdout.
stty tostopprovocherà la sospensione dei lavori in background se provano a scrivere sul terminale.
Quando si utilizza &, il processo è in esecuzione in background. Ma il suo output standard è ancora il terminale.
In effetti, è possibile eseguire ping 8.8.8.8 &e find / -name '*test*' &allo stesso tempo (con conseguente output misto), ma non è possibile eseguire ping 8.8.8.8e find / -name '*test*'allo stesso tempo sulla stessa shell.
Se non vuoi vedere nulla, usa qualcosa di simile ping 8.8.8.8 &> /dev/null &.
Inoltre, potresti voler conoscere nohupe disown.
disownnon impedisce la stampa dell'output sul terminale.
/dev/nullcome file per reindirizzare l'output del terminale se si vuole scartare l'output invece di salvarlo da qualche parte. E ho ragione che i2>&1reindirizzamentistderrastdout? Forse vuoi chiarire anche quello ... Grazie.