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.
&
y&&
:&
ejecuta el primer comando en segundo plano;&&
ejecuta el primer comando y procede condicionalmente al segundo si sale con éxito.Respuestas:
El
&
hace que el comando ejecutar en segundo plano.De
man bash
:fuente
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 **
fuente
nohup
mantendrá los procesos vivos también.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.
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:
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 .
fuente
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 usarSIG_IGN
para ignorar todas las señales oSIG_DFL
para 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.fuente