¿Qué significa "&" al final de un comando de Linux?

Resuelto Max asked hace 12 años • 5 respuestas

Soy administrador de sistemas y me pidieron que ejecutara un script de Linux para limpiar el sistema.

El comando es este:

perl script.pl > output.log &

Entonces este comando termina con una &señal, ¿tiene algún significado especial?

Tengo conocimientos básicos de Shell pero nunca había visto esto antes.

Max avatar Nov 12 '12 12:11 Max
Aceptado

Esto &hace que el comando se ejecute en segundo plano.

De man bash:

Si el operador de control & termina un comando , el shell ejecuta el comando en segundo plano en un subshell. El shell no espera a que finalice el comando y el estado de retorno es 0.

mgarciaisaia avatar Nov 12 '2012 05:11 mgarciaisaia

Cuando no se dice lo contrario, los comandos toman el primer plano. Sólo tiene un proceso "en primer plano" ejecutándose en una única sesión de shell. El símbolo & indica a los comandos que se ejecuten en un proceso en segundo plano e inmediatamente regresa a la línea de comandos para obtener comandos adicionales.

sh my_script.sh &

Un proceso en segundo plano no permanecerá activo después de que se cierre la sesión del shell. SIGHUP finaliza todos los procesos en ejecución. De todos modos, por defecto. Si su comando dura mucho tiempo o se ejecuta indefinidamente (es decir, microservicio), debe agregarle nohup para que siga ejecutándose después de desconectarse de la sesión:

nohup sh my_script.sh &

EDITAR: Parece haber un área gris con respecto al cierre de procesos en segundo plano cuando se usa &. Solo tenga en cuenta que el shell puede cerrar su proceso dependiendo de su sistema operativo y configuraciones locales (particularmente en CENTOS/RHEL): https://serverfault.com/a/117157 .

Timothy Jannace avatar Mar 18 '2017 18:03 Timothy Jannace

Además, puede utilizar el signo "&" para ejecutar muchos procesos a través de una (1) conexión ssh para mantener un número mínimo de terminales. Por ejemplo, tengo un proceso que escucha mensajes para extraer archivos, el segundo proceso escucha mensajes para cargar archivos: usando "&" puedo ejecutar ambos servicios en una terminal, a través de una única conexión ssh a mi servidor .

Estos procesos que se ejecutan a través de "&" también "permanecerán vivos" después de que se cierre la sesión ssh. Bastante interesante y útil si la conexión ssh al servidor se interrumpe y no se utilizó ningún multiplexor de terminal (screen, tmux, byobu).

Zack S avatar Oct 23 '2014 17:10 Zack S