Consideremos que ha abierto un gedit
editor de texto desde un terminal y está trabajando en ello. Si cierra la terminal antes de cerrar gedit
, el gedit también se cierra tan pronto como cierra la terminal. Entonces, ¿qué está pasando aquí? Se gedit
ejecuta como un proceso secundario debajo de la terminal. Cuando cierra el terminal, se envía una señal de colgar ( SIGHUP
) al proceso que mata el proceso secundario.
Por otro lado, si desea que su proceso secundario (aquí gedit
) continúe ejecutándose incluso después de cerrar la terminal principal, querrá que su proceso sea inmune a la señal de colgar. Para que al cerrar la terminal no se cierre el proceso hijo. nohup
hace exactamente este trabajo
nohup
no desconecta un comando del terminal , hace que su script ignore SIGHUP y redirige stdout / stderr a un archivo nohup.out, para que el comando pueda continuar ejecutándose en segundo plano después de cerrar sesión. Si cierra el shell / terminal o cierra sesión, su comando ya no es un hijo de ese shell. Pertenece al proceso init. Si busca pstree
, verá que ahora es propiedad del proceso 1 (init). Eso no se puede volver a poner en primer plano porque el primer plano ya no existe.
disown
es una mejor alternativa anohup
. Haga un fondo con un comando concommand &
oCtrl-Z
, luegodisown
úselo para separarlo del shell.