GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué ejecutar un comando de shell de Linux con '&'?

En un script de shell Bash, el signo "&" se usa para bifurcar procesos:

find -name hello &

Hará que el comando de búsqueda se bifurque y se ejecute en segundo plano (siempre puede eliminarlo por su PID).


¿Por qué ejecutar un comando de shell de Linux con '&'?

Para recuperar su solicitud de inmediato y ejecutar el proceso en segundo plano.

¿Cuál es la función de ellos?

nohup permite que el proceso en segundo plano continúe ejecutándose incluso después de que el usuario cierre la sesión (o salga del shell de inicio).

>& redirige tanto la salida estándar como el error estándar al archivo de registro.

& ejecuta todo en segundo plano y le devuelve el aviso de inmediato.

Explicación:

Cada proceso de Linux abre tres canales de E/S, una entrada "stdin", una salida estándar "stdout" y una salida de error estándar "stderr". Se pueden usar para binario, pero tradicionalmente son texto. Cuando la mayoría de los programas ven cerrar la entrada estándar, salen (esto puede ser cambiado por el programador).

Cuando el shell principal sale, stdin se cierra en los hijos y (a menudo, por lo general) los hijos también salen. Además, los niños reciben una señal de software, SIGHUP, que indica que el usuario ha "colgado" (anteriormente, el módem) y el valor predeterminado aquí es salir también. (Nota, un programador puede cambiar todo esto al escribir el programa).

Entonces, lo que hace nohup es darle al proceso secundario un entorno de E/S separado, vinculando las entradas y salidas a algo que no está vinculado al shell principal y protegiendo al hijo de la señal SIGHUP. Una vez que el usuario se desconecte, verá el proceso en segundo plano nohup propiedad de init (proceso 1), no el shell del usuario.

Sin embargo nohup no puede hacer el trabajo completamente si el proceso se ejecuta en primer plano, entonces & se usa para ejecutar el programa en segundo plano, donde felizmente puede seguir ejecutándose con o sin un usuario conectado.


Además de las respuestas de Martin, Ash y Kevin, a veces verás un ampersand utilizado matemáticamente para un AND bit a bit:

$ echo $(( 11 & 7 ))
3

En caso de que no esté familiarizado con los operadores de bits:

11: 1011
 7: 0111
-------- AND
 3: 0011

En cada posición hay un bit uno en el primer número Y el segundo número, establezca ese bit en uno en la respuesta.

Para profundizar en la respuesta de Ash, cuando se usa en la redirección, el ampersand puede indicarle al shell que copie un descriptor de archivo. En este comando echo "hello" > outputfile 2>&1 el ampersand hace que cualquier salida que pueda ir a un error estándar (stderr, descriptor de archivo 2) vaya al mismo lugar que la salida estándar (stdout, descriptor de archivo 1, el valor predeterminado para el lado izquierdo de > ). El >& outputfile operador es la abreviatura de > outputfile 2>&1 .

Además, como novedad en Bash 4, hay dos nuevos terminadores para cláusulas en el case comando ;& y ;;& que afectan si un caso "falla" y, de ser así, si se realiza la siguiente prueba.


Linux
  1. Por qué me quedo con xterm

  2. Comando wc Linux con ejemplos

  3. Comando de clasificación de Linux con ejemplos

  4. Comando Linux Tee con ejemplos

  5. Comando JQ en Linux con ejemplos

Comando matar en Linux

15 comandos ps de Linux con ejemplos

Comando Killall en Linux con ejemplos

Comando runuser de Linux - Ejecutar Shell con ID de usuario/grupo especificado

Comando fuente en Linux

Comando de espera en Linux explicado con ejemplos