¿Por qué puedo ver el resultado de los procesos en segundo plano?

21

Por ejemplo, cuando escribo ping 8.8.8.8 & , ¿por qué podemos ver que el proceso de ping funciona? Y cuando escribo find / -name '*test*' & , también se ve en el monitor.

¿Por qué es eso? ¿No está realmente en el fondo?

    
pregunta NoFence 18.08.2015 - 08:23

2 respuestas

32

El & indica al shell que ejecute el comando en segundo plano, es decir, se bifurca y se ejecuta en un subconjunto separado, como un trabajo, de forma asincrónica.

Tenga en cuenta que cuando coloca & la salida, tanto stdout como stderr , aún se imprimirá en la pantalla . Si no desea ver ningún resultado en la pantalla, redireccione tanto stdout como stderr a un archivo de la siguiente manera:

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

Normalmente, puede descartar el stderr redirigiéndolo a /dev/null si no está preocupado por analizar los errores más adelante.

También puede ejecutar comandos / scripts al mismo tiempo, en subcajas independientes. Por ejemplo;

./script1 & ./script2 & ./script3 & 

Se puede regresar un trabajo en segundo plano a la línea de comando antes de que finalice con el comando:

fg <job-number>

El job-number se puede obtener ejecutando

jobs
    
respondido por el Ron 18.08.2015 - 08:33
8

Cuando usa & , el proceso se ejecuta en segundo plano. Pero su salida estándar sigue siendo la terminal.

De hecho, puede ejecutar ping 8.8.8.8 & y find / -name '*test*' & al mismo tiempo (lo que da como resultado una salida mixta), pero no puede ejecutar ping 8.8.8.8 y find / -name '*test*' al mismo tiempo en el mismo shell.

Si no quieres ver nada, usa algo como ping 8.8.8.8 &> /dev/null & .

Además, es posible que desee obtener información sobre nohup y disown .

    
respondido por el Andrea Corbellini 18.08.2015 - 08:33

Lea otras preguntas en las etiquetas