236 votos

Puedo nohup/pantalla ya comenzó el proceso?

Estoy haciendo unas series de pruebas de larga duración de migración de datos de secuencias de comandos, a través de SSH. Digamos que puedo empezar a correr un script alrededor de las 4 de la tarde; ahora, a las 6 PM alrededor de los rollos, y estoy maldiciendo a mí mismo por no hacer esto, todos los en screen.

¿Hay alguna manera de forma "retroactiva" nohup un proceso, o tengo que dejar a mi equipo en línea de toda la noche? Si no es posible adjuntar screen /nohup un proceso que ya comenzó, entonces, ¿por qué? Algo que ver con la forma de padre/hijo procesos de interactuar? (No voy a aceptar un "no" de respuesta que no, al menos, la dirección de la pregunta de 'por qué' -- lo siento ;) )

16voto

freiheit Puntos 9670

Cuando se inicia un proceso, STDIN, STDOUT y STDERR está conectado a algo. En general, usted no puede cambiar una vez que el comando se ha iniciado. En el caso de que usted está describiendo, que es probablemente una tty asociados con la sesión de ssh. nohup más o menos igual que hace ...

command < /dev/null > nohup.out 2>&1

Es decir, los conjuntos de STDIN a /dev/null, STDOUT a un archivo y STDERR a STDOUT. Pantalla mucho más sofisticada de las cosas que involucran la configuración de tty que dirigen a sí mismo.

No sé de ningún modo, con carácter retroactivo, nohup o screenize un proceso en ejecución. Si usted cd a /proc/$pid/fd y ver lo que 0, 1 y 2 puntos.

Usted podría tener algo de suerte con negaré, pero no se si el proceso intenta hacer algo con STDIN, STDOUT o STDERR.

3voto

TRS-80 Puntos 2214

Cryopid es un desarrollo de la autora de agarrar.c que se congela un proceso en un archivo, que, a continuación, ejecutar (en el interior de la pantalla) para reanudar el proceso.

2voto

Ben Dunlap Puntos 1101

Uso reptyr

Desde el README:

reptyr - A tool for "re-ptying" programs.
-----------------------------------------

reptyr is a utility for taking an existing running program and
attaching it to a new terminal. Started a long-running process over
ssh, but have to leave and don't want to interrupt it? Just start a
screen, use reptyr to grab it, and then kill the ssh session and head
on home.

USAGE
-----

  reptyr PID

"reptyr PID" will grab the process with id PID and attach it to your
current terminal.

After attaching, the process will take input from and write output to
the new terminal, including ^C and ^Z. (Unfortunately, if you
background it, you will still have to run "bg" or "fg" in the old
terminal. This is likely impossible to fix in a reasonable way without
patching your shell.)

Un par de posts en el blog del autor:

1voto

gharper Puntos 3916

Si usted está usando Bash, puede ejecutar "repudiar-h de trabajo"

renegar de

disown [-ar] [-h] [jobspec ...]

Without options, each jobspec is removed from the table of active jobs.

Si el -h' option is given, the job is not removed from the table, but is marked so that SIGHUP is not sent to the job if the shell receives a SIGHUP. If jobspec is not present, and neither the - 'ni -r' option is supplied, the current job is used. If no jobspec is supplied, the - ' opción para eliminar o marcar todos los puestos de trabajo; la `-r' opción sin jobspec argumento restringe la operación a la ejecución de los trabajos.

0voto

Dot Net Pro UK Puntos 761

Para robar un proceso desde una tty a su actual tty, puede que desee probar este hack:

http://www.ucc.asn.au/~dagobah/things/grab.c

Necesita volver a formatear con el fin de compilar para Linux/glibc versiones, pero todavía funciona.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: