En primer lugar, cada vez que ejecutas un comando, tu shell bifurcará un nuevo proceso, independientemente de si lo ejecutas &
o no. &
solo significa que lo estás ejecutando en segundo plano.
Tenga en cuenta que esto no es muy preciso. Algunos comandos, como cd
son funciones de shell, no suelen bifurcar un nuevo proceso. type cmd
generalmente le dirá si cmd
es un comando externo o una función de shell. type type
te dice que type
sí es una función de shell.
nohup
Es algo diferente. Le dice al nuevo proceso que ignore SIGHUP
. Es la señal enviada por el núcleo cuando se cierra el shell principal.
Para responder a su pregunta, haga lo siguiente:
- ejecutar
emacs &
(por defecto debe ejecutarse en una ventana X separada) .
- en el shell principal, ejecute
exit
.
Notarás que la emacs
ventana se cierra, a pesar de ejecutarse en segundo plano. Este es el comportamiento predeterminado y nohup
se usa precisamente para modificarlo.
Ejecutar un trabajo en segundo plano (con &
o bg
, apuesto a que otros shells también tienen otras sintaxis) es una característica de shell, derivada de la capacidad de los sistemas modernos para realizar múltiples tareas. En lugar de bifurcar una nueva instancia de shell para cada programa que desea iniciar, conchas modernas ( bash
, zsh
, ksh
, ...) tendrá la posibilidad de gestionar una lista de programas (o trabajos ). Solo uno de ellos a la vez puede estar en primer plano , lo que significa que obtiene el foco de shell. Desearía que alguien pudiera ampliar más las diferencias entre un proceso que se ejecuta en primer plano y uno en segundo plano (el principal es el acceso a stdin
/ stdout
).
En cualquier caso, esto no afecta la forma en que reacciona el proceso secundario SIGHUP
. nohup
hace.
nohup
hace. ¿Qué parte has confundido?