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

99

Soy administrador del sistema y se me ha pedido que ejecute un script de Linux para limpiar el sistema.

El comando es este:

perl script.pl > output.log &

entonces este comando termina con un &signo, ¿tiene algún significado especial?

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

Tipo
fuente
lo siento mi mala, yo sabía acerca de tales cosas básicas
Amigo
3
Si está en esta página buscando la diferencia entre &y &&: &ejecuta el primer comando en segundo plano; &&ejecuta el primer comando y procede condicionalmente al segundo si sale con éxito.
David Bodow

Respuestas:

151

El &hace que el comando ejecutar en segundo plano.

De man bash:

Si un comando es terminado por el operador de control & , 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
fuente
13

Además, puede usar el signo "&" para ejecutar muchos procesos a través de una (1) conexión ssh con el fin de 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: con "&" puedo ejecutar ambos servicios en una terminal, a través de una única conexión ssh a mi servidor .


***** Me acabo de dar cuenta de que estos procesos que se ejecutan a través del "&" también "permanecerán vivos" después de que se cierre la sesión ssh. bastante ordenado y útil si su conexión al servidor se interrumpe **

Zack S
fuente
nohupmantendrá los procesos vivos también.
Jerry Chin
2
con & podemos obtener PID también para poder terminar el proceso si queremos y también podemos verificar el estado de ese proceso
Dhaval Solanki
13

Cuando no se indica lo contrario, los comandos se apoderan del primer plano. Solo 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 y regresa inmediatamente 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 de shell. SIGHUP finaliza todos los procesos en ejecución. De todos modos, por defecto. Si su comando es de larga duración o se ejecuta de forma indefinida (es decir, microservicio), debe cancelarlo con 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 según su sistema operativo y las configuraciones locales (particularmente en CENTOS / RHEL): https://serverfault.com/a/117157 .

Timothy Jannace
fuente
3

No lo sé con certeza, pero estoy leyendo un libro en este momento y lo que obtengo es que un programa necesita manejar su señal (como cuando presiono CTRL-C). Ahora un programa puede usar SIG_IGNpara ignorar todas las señales o SIG_DFLpara restaurar la acción predeterminada.

Ahora bien, si lo hace $ command &, este proceso que se ejecuta como proceso en segundo plano simplemente ignora todas las señales que ocurrirán. Para los procesos en primer plano, estas señales no se ignoran.

Kaustubh Kislay
fuente