¿Qué significa el símbolo de y comercial (&) con `nohup`?

11

He visto toneladas de ejemplos en los que a &sigue el final de una cadena de comando, pero parece que no puedo encontrar una explicación sobre lo que hace. Ni siquiera está en nohupla manpágina. ¿Es esto una cosa de concha?

Utilizando &o no, encuentro que cualquier proceso ejecutado nohupparece exhibir inmunidad a cualquier señal de bloqueo.

Chad Harrison
fuente
1
"Creo que cualquier proceso ejecutado con nohup parece exhibir inmunidad a cualquier señal de suspensión". Para eso es nohup.
Samuel Edwin Ward
Ok, déjenme aclarar: los únicos ejemplos que he visto usan el &, así que no estaba seguro si &había algún tipo de modificador o argumento que hiciera que se nohupcomportara de manera diferente.
Chad Harrison
1
Eso es algo razonable de sospechar. De hecho, no modifica el comportamiento nohup (nohup ni siquiera llega a verlo) sino que modifica el comportamiento del shell.
Samuel Edwin Ward,
nohup & -> No Hangup y fondo. De los viejos tiempos de los módems y terminales en serie. Cuando mi terminal y mi módem se desconecten, siga procesando esto en segundo plano para que el trabajo esté listo la próxima vez que me conecte.
Fiasco Labs

Respuestas:

19

Desde la página de manual de 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.

Entonces sí, es una cosa de shell, y se puede usar con cualquier comando. Esencialmente, le devuelve el control de inmediato y permite que el comando se complete en segundo plano. Esto casi siempre se usa nohupporque normalmente desea salir del shell después de iniciar el comando.

mgorven
fuente
44
Te he visto publicar muchas buenas respuestas últimamente y mi cerebro siempre traduce tu nombre de usuario a McGuyver. No estoy seguro de por qué siento la necesidad de decirte esto.
MDMarra
1
@MDMarra Lo tomaré como un cumplido ;-)
mgorven
1
@MDMarra Al menos no piensas: "McGruber"
Ward - Restablece a Monica
7

El uso de la y comercial (&) ejecutará el comando en un proceso secundario (secundario a la sesión bash actual). Sin embargo, cuando salga de la sesión, se eliminarán todos los procesos secundarios.

el uso de nohup + ampersand (&) hará lo mismo, excepto que cuando la sesión finalice, el padre del proceso secundario se cambiará a "1", que es el proceso "init", evitando así que el niño sea asesinado.

Michel
fuente
3

Sí, es una cuestión de shell: ejecuta el comando en segundo plano para que no tenga que esperar a que vuelva el comando actual antes de emitir más comandos.

robar
fuente