Por ejemplo, cuando escribo ping 8.8.8.8 &
, ¿por qué podemos ver el proceso de ping funcionando? Y cuando escribo find / -name '*test*' &
, también se ve en el monitor.
¿Porqué es eso? ¿No está realmente en segundo plano?
fuente
Por ejemplo, cuando escribo ping 8.8.8.8 &
, ¿por qué podemos ver el proceso de ping funcionando? Y cuando escribo find / -name '*test*' &
, también se ve en el monitor.
¿Porqué es eso? ¿No está realmente en segundo plano?
La &
dirige el shell para ejecutar el comando en el fondo, es decir, que se bifurca y se ejecutan en un sub-shell por separado, como un trabajo, de forma asíncrona.
Tenga en cuenta que cuando coloca &
la salida, tanto stdout como stderr , todavía se imprimirán en la pantalla . Si no desea ver ningún resultado en la pantalla, redirija ambos stdout
y stderr
a un archivo:
myscript > ~/myscript.log 2>&1 &
Por lo general, es posible que desees descartarlo stderr
redirigiéndolo a /dev/null
si no te preocupa analizar los errores más adelante.
También puede ejecutar comandos / scripts al mismo tiempo, en subcapas separadas. Por ej.
./script1 & ./script2 & ./script3 &
Un trabajo en segundo plano puede volver a la línea de comando antes de que finalice con el comando:
fg <job-number>
El job-number
se puede obtener ejecutando
jobs
/dev/null
como un archivo para redirigir la salida del terminal si se desea descartar la salida en lugar de guardarla en algún lugar. ¿Y estoy en lo cierto que2>&1
redirigestderr
astdout
? Quizás también quieras aclarar eso ... Gracias.2>&1
redirigestderr
astdout
.stty tostop
hará que se suspendan los trabajos en segundo plano si intentan escribir en el terminal.Cuando lo 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 &
yfind / -name '*test*' &
al mismo tiempo (lo que resulta en una salida mixta), pero no puede ejecutarping 8.8.8.8
yfind / -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 aprender sobre
nohup
ydisown
.fuente
disown
no evita que la salida se imprima en el terminal.