¿Cómo pongo un proceso que ya se está ejecutando en nohup?

Resuelto flybywire asked hace 15 años • 10 respuestas

Tengo un proceso que ya lleva mucho tiempo ejecutándose y no quiero finalizarlo.

¿Cómo lo pongo en nohup (es decir, cómo hago para que continúe ejecutándose incluso si cierro la terminal?)

flybywire avatar Mar 09 '09 15:03 flybywire
Aceptado

Usando el control de trabajo de bash para enviar el proceso a segundo plano:

  1. Ctrl+ Zpara detener (pausar) el programa y volver al shell.
  2. bgpara ejecutarlo en segundo plano.
  3. disown -h [job-spec]donde [especificación de trabajo] es el número de trabajo (como %1para el primer trabajo en ejecución; busque su número con el jobscomando) para que el trabajo no finalice cuando se cierre la terminal.
Node avatar Mar 09 '2009 08:03 Node

Supongamos que por alguna razón Ctrl+ Ztampoco funciona, vaya a otra terminal, busque la identificación del proceso (usando ps) y ejecute:

kill -SIGSTOP PID 
kill -SIGCONT PID

SIGSTOPsuspenderá el proceso y SIGCONTlo reanudará, en segundo plano. Entonces, cerrar ambas terminales no detendrá el proceso.

Pungs avatar Apr 23 '2012 08:04 Pungs

El comando para separar un trabajo en ejecución del shell ( = lo convierte en nohup) es disownun comando básico del shell.

Desde bash-manpage (man bash):

repudiar [-ar] [-h] [especificación de trabajo ...]

Sin opciones, cada especificación de trabajo se elimina de la tabla de trabajos activos. Si se proporciona la opción -h, cada especificación de trabajo no se elimina de la tabla, pero se marca para que SIGHUP no se envíe al trabajo si el shell recibe un SIGHUP. Si no hay ninguna especificación de trabajo presente y no se proporcionan las opciones -a ni -r, se utiliza el trabajo actual. Si no se proporciona ninguna especificación de trabajo, la opción -a significa eliminar o marcar todos los trabajos; la opción -r sin un argumento de especificación de trabajo restringe la operación a trabajos en ejecución. El valor de retorno es 0 a menos que una especificación de trabajo no especifique un trabajo válido.

Eso significa que un simple

disown -a

eliminará todos los trabajos de la tabla de trabajos y los desactivará

serioys sam avatar Mar 09 '2009 08:03 serioys sam