Tengo problemas para entender mi situación y Google no ha sido de mucha ayuda hasta ahora.
Comencé un trabajo en segundo plano de bash:
ping google.com &
Primero obtengo la ID del proceso, luego Bash imprime la salida estándar en la pantalla.
user@host:~$ ping google.com &
[1] 14004
user@host:~$ PING google.com (173.194.44.66) 56(84) bytes of data.
64 bytes from ham02s14-in-f2.1e100.net (173.194.44.66): icmp_seq=1 ttl=54 time=26.3 ms
64 bytes from ham02s14-in-f2.1e100.net (173.194.44.66): icmp_seq=2 ttl=54 time=27.4 ms
64 bytes from ham02s14-in-f2.1e100.net (173.194.44.66): icmp_seq=3 ttl=54 time=29.2 ms
...
Esto contradice todo lo que leí hoy. Tengo una configuración estándar de Debian Jessie que ejecuta GNU bash, versión 4.3.30(1) (x86_64-pc-linux-gnu).
¿Puede alguien explicarme esto? Gracias.
Respuesta1
De forma predeterminada, al menos para sistemas compatibles con POSIX, ejecutar un comando en segundo plano, con &
, solo se separa stdin
, por lo que podrá ejecutar otros comandos. stdout
y stderr
todavía están conectados al shell principal.
Si no desea verlos stdout
y/o stderr
simplemente puede redirigirlos a un archivo o /dev/null
:
command &>log.txt & #stdout and stderr to log.txt
command 1>/dev/null & #stdout to /dev/null, stderr still attached to shell
command 1>output.log 2>error.log & #stdout to output.log, stderr to error.log
Respuesta2
Depende de usted si se muestra la salida estándar de un proceso en segundo plano en el terminal. Puede cambiar el comportamiento con la stty
utilidad.
Ejemplo
El valor predeterminado permite que un proceso en segundo plano escriba en la terminal:
$ echo Hello &
[1] 25850
Hello
$
Ese comportamiento se puede cambiar con el stty
comando:
$ stty tostop
$ echo Hello &
[2] 25873
[2]+ Stopped echo Hello
$
Si tostop
se especifica, el proceso en segundo plano se detiene cuando intenta escribir en la salida estándar. Si desea permitir que continúe, puede devolverlo al primer plano:
$ fg
echo Hello
Hello
$
Para volver atrás, ejecute stty -tostop
. Después de ejecutar esto,nuevoLos trabajos en segundo plano que se creen podrán escribir en la salida estándar. (Los trabajos existentes no se verán afectados).
Documentación
man stty
explica la tostop
opción de la siguiente manera:
* [-]tostop
detener trabajos en segundo plano que intentan escribir en la terminal
*
La página de manual utiliza lo anterior para identificar esta opción como no POSIX .