Estoy haciendo algunas pruebas de secuencias de comandos de migración de datos de larga duración, a través de SSH. Digamos que empiezo a ejecutar un script alrededor de las 4 PM; ahora, llegan las 6 PM, y me estoy maldiciendo por no hacer todo esto screen
.
¿Hay alguna forma de "retroactivamente" nohup
un proceso, o necesito dejar mi computadora en línea toda la noche? Si no es posible adjuntar screen
a / nohup
un proceso que ya he comenzado, ¿por qué? ¿Algo que ver con cómo interactúan los procesos padre / hijo? (No aceptaré una respuesta "no" que al menos no aborde la pregunta de "por qué" - lo siento;))
disown
. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_theRespuestas:
Si estás usando Bash, puedes ejecutar
disown -h job
fuente
disown %1
si 1 es la especificación de trabajo, a diferencia de fg o bg, donde solo usabg 1
serverwatch.com/tutorials/article.php/3935306/…Usar reptyr
Desde el archivo Léame:
Algunas publicaciones de blog de su autor:
fuente
Para robar un proceso de un tty a su tty actual, puede probar este truco:
http://www.ucc.asn.au/~dagobah/things/grab.c
Necesita un reformateo para compilar las versiones actuales de Linux / glibc, pero aún funciona.
fuente
Cuando se inicia un proceso, STDIN, STDOUT y STDERR están conectados a algo . Generalmente no puede cambiar eso una vez que se inicia el comando. En el caso que está describiendo, probablemente sea un tty asociado con la sesión ssh. casi no hace más que ...
Es decir, establece STDIN en / dev / null, STDOUT en un archivo y STDERR en STDOUT. Screen hace cosas mucho más sofisticadas que implican configurar ttys que se dirigen a sí mismos.
No conozco ninguna forma de retroceder o filtrar retroactivamente un proceso en ejecución. Si haces cd a / proc / $ pid / fd y ves a qué apuntan 0, 1 y 2.
Es posible que tenga suerte con Disown, pero no si el proceso intenta hacer algo con STDIN, STDOUT o STDERR.
fuente
Cryopid es un desarrollo adicional del autor de grab.c que congela un proceso en un archivo, que luego ejecuta (dentro de la pantalla) para reanudar el proceso.
fuente
Solo puedo darte un simple "No" sin el por qué de la parte de la pantalla, me interesaría la razón por ti mismo.
Sin embargo, ¿has probado
disown
(un bash incorporado)fuente
nohup en Solaris / OpenSolaris tiene un indicador -p para nohup un proceso en ejecución; por ejemplo, consulte la página del manual de Solaris 10 nohup .
fuente
Hace poco vi un enlace a neercs , que es una utilidad similar a una pantalla creada con libcaca, una biblioteca de color ascii-art. Entre otras características, cuenta con la capacidad de tomar un proceso existente y volver a crearlo dentro de su sesión de neercs (pantalla).
Sin embargo, no lo he usado, así que no puedo comentar si funciona o no.
fuente
Probablemente estoy subestimando esto, así que siéntete libre de corregirme (¡ya aprendí sobre disown!) ... ¿No funcionarían ctrl-Z y "bg" para al menos hacer que el proceso se ejecute en segundo plano? ¿O es el problema clave que aún querría ver STDOUT mientras se ejecuta?
fuente
Si puede vivir sin poder interactuar con el proceso y no se opone a cargar módulos aleatorios del núcleo, podría hacer algo peor que mirar a Snoop . Alternativamente, hay un par de otros proyectos. Aquí hay una llamada injcode, que en su mayoría puede hacer lo que desea hacer.
fuente
Puede redirigir la salida del proceso al archivo con gdb
https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux
y luego repudiarlo
Upd: tuve que ejecutar gdb con sudo y un comando gdb ligeramente diferente en Ubuntu 18.04:
p (int)dup2(open("/tmp/test.stdout", 1), 1)
fuente
Quería usar
nohup
(o similar) para iniciar ellinks
navegador de línea de comandos y adjuntarlo después de descargar un archivo del sitio web ASP.NET con un proceso de autenticación complicado y una gran cantidad de estados de vista ocultos que dificultaban el uso. concurl
/wget
.Finalmente terminé usando el
tmux
que resolvió el trabajo simplemente genial:tmux
links
en mi caso) y déjela ejecutándosetmux attach
para que la aplicación vuelva a la pantallafuente
¿Es que te preocupa que la sesión se agote? En ese caso, podría Ctrl-z y bg el proceso, y luego simplemente poner algo para mantener viva la sesión como un "ping -t localhost" o "top".
Si es que desea cerrar sesión, me temo que no puedo agregar a los otros comentarios.
fuente