¿Cuál es la función del comando nohup?

18

Soy un novato en Ubuntu. He aprendido un comando

nohup [command]- ejecutar <command>inmune a la señal de colgar

No puedo entender el significado de " inmune a la señal de colgar ". ¿De qué tipo de señal está hablando? Y por favor dígame cómo usar este comando con un ejemplo.

coding_ninza
fuente
Si está disponible en su shell, disownes una mejor alternativa a nohup. Haga un fondo con un comando con command &o Ctrl-Z, luego disownúselo para separarlo del shell.
John Kugelman apoya a Monica el
@JohnKugelman que no es suficiente , también ha desviado la secuencia de entrada, salida y error. Entonces, ¿por qué no usar 'nohup' que hace esto automáticamente por usted?
miracle173

Respuestas:

34

Consideremos que ha abierto un gediteditor 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 geditejecuta 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. nohuphace exactamente este trabajo

nohupno 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.

souravc
fuente
16

Además de lo que escribió @sourvac, este es un legado de Back In The Day cuando las personas inician sesión a través de terminales tontas de solo texto, a menudo a través del módem original (110 baudios analógico): el "colgar" literalmente es "colgar el teléfono". ".

Un pid que es inmune a la señal de colgar seguirá funcionando incluso después de cerrar sesión y colgar el teléfono . Esto fue muy útil en computadoras lentas cuando los trabajos se ejecutaban durante horas y horas, y no podía simplemente permanecer conectado (alguien más necesitaba usar el terminal, necesitaba usar el teléfono, la estática en la línea podría "interrumpir" la conexión , etc.)

RonJohn
fuente
1
No solo en el pasado. Ejecuto la mayoría de mis trabajos grandes en un clúster de servidores en el que participo. Si no usara nohup, tendría que dejar mi computadora portátil conectada a esas máquinas durante días mientras esperaba que terminaran los trabajos.
Ray
@ Ray ¿Qué hay de ejecutarlos a través de "at" o como trabajos cron?
RonJohn
@RonJohn Claro. O a través de un motor de red. No quise sugerir que nohup era la única opción, solo que todavía se usa para este propósito hoy.
Ray
1
Tal vez sus comentarios históricos son correctos. Pero sus conclusiones sobre su importancia actual son erróneas. No es útil en computadoras lentas, pero es útil para trabajos de larga duración. Estas son dos cosas diferentes. Utiliza 'nohup' para proteger su trabajo contra la desconexión intencional o no intencional de su terminal. Incluso hoy en día no está satisfecho si un trabajo se cancela porque un error de red desconecta su terminal y su trabajo se cancela.
miracle173
Los trabajos de @Ray Cron son completamente inapropiados para lograr esto. Los Cronjobs son para tareas periódicas, debe configurar el entorno en el cronjob y considerar muchas otras cosas. Quizás 'at' es un poco más fácil de manejar pero, sin embargo, más complejo que nohup.
miracle173