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 stdouty stderra un archivo:
myscript > ~/myscript.log 2>&1 &
Por lo general, es posible que desees descartarlo stderrredirigiéndolo a /dev/nullsi 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-numberse puede obtener ejecutando
jobs
/dev/nullcomo 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>&1redirigestderrastdout? Quizás también quieras aclarar eso ... Gracias.2>&1redirigestderrastdout.stty tostophará 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.8yfind / -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
nohupydisown.fuente
disownno evita que la salida se imprima en el terminal.