Perché posso vedere l'output dei processi in background?

21

Ad esempio, quando digito ping 8.8.8.8 & , perché possiamo vedere il processo ping funzionante? E quando digito find / -name '*test*' & , viene visualizzato anche sul monitor.

Perché è così? Non è davvero sullo sfondo?

    
posta NoFence 18.08.2015 - 10:23

2 risposte

32

Il & indirizza la shell a eseguire il comando in background, vale a dire, è biforcuta e viene eseguita in una sotto-shell separata, come un lavoro, in modo asincrono.

Tieni presente che quando inserisci & l'output, sia stdout che stderr , sarà ancora stampato sullo schermo . Se non vuoi vedere alcun output sullo schermo, reindirizza sia stdout che stderr in un file:

myscript > ~/myscript.log 2>&1 &

In genere potresti voler eliminare stderr reindirizzandolo a /dev/null se non sei preoccupato di analizzare gli errori in un secondo momento.

Puoi anche eseguire comandi / script allo stesso tempo, in sotto-shell 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
    
risposta data Ron 18.08.2015 - 10:33
8

Quando utilizzi & , il processo è in esecuzione in background. Ma il suo output standard è ancora il terminale.

In effetti, puoi eseguire ping 8.8.8.8 & e find / -name '*test*' & allo stesso tempo (risultando in un output misto), ma potresti non eseguire ping 8.8.8.8 e find / -name '*test*' nello stesso momento sulla stessa shell.

Se non vuoi vedere nulla, usa qualcosa come ping 8.8.8.8 &> /dev/null & .

Inoltre, potresti voler conoscere nohup e disown .

    
risposta data Andrea Corbellini 18.08.2015 - 10:33

Leggi altre domande sui tag