Как перенаправить вывод запущенного процесса при удалении устройства вывода

Вы можете посмотреть экран GNU или tmux . у них обоих есть функция прикрепления.
типичный рабочий процесс выглядит следующим образом:

  1. Соединение с SSH
  2. Запуск сеанса screen / tmux.
  3. Делай свою работу.
  4. Отключить.
  5. При следующем входе в систему прикрепите последний сеанс и продолжайте работу.
1
19.05.2018, 16:26
3 ответа

Esto no es posible sin un depurador.

La salida estándar y el error estándar de su programa van al lado esclavo de una pseudo terminal -cuyo lado maestro ha sido cerrado. No hay manera, salvo de medidas extremas como depurar el proceso e interceptar llamadas al sistema, para acceder a su salida.

Estas son las semánticas de los terminales.

Si cuelga la sesión del terminal (, es decir, cuelga el dispositivo serie de un terminal real, sale de una sesión de inicio de sesión en un dispositivo de terminal virtual del kernel, cuelga el lado maestro de un pseudo terminal -como lo usa el SSH/usuario -] terminales virtuales espaciales/TELNET/rlogin/emuladores de terminal X11 )los descriptores de archivos abiertos para procesos que aún hacen referencia a ese terminal están destinados a no causar E/S ni estar conectados a nada más. Es el enfoque de Unix para combatir los programas de caballos de Troya que solían aferrarse para abrir descriptores de archivos en dispositivos terminales y usarlos para presentar avisos de inicio de sesión falsos al siguiente usuario de la terminal.

Esto ha engendrado desde hace mucho tiempo programas como tmux, GNU Screen, mosh oconsole-terminal-emulatorque mantienen abierto el lado maestro de un pseudo terminal -, emulan la pantalla y la entrada de un terminal, y permiten desconectar y procesos cliente/realizador reconectables (, es decir, las partes "cliente" de tmuxy GNU Screen; clientes de mosh; o console-fb-realizer, console-termio-realizer, o algún otro )para convertir eso en dispositivos reales.

Así que use tmux, GNU Screen, mosh, un terminal virtual de espacio de usuario -del conjunto de herramientas de nosh, o algún otro sistema similar si desea volver a conectar.

Lecturas adicionales

1
27.01.2020, 23:16

Ver es fácil:

cat /proc/17193/fd/1 ; tail -n 0 -f /proc/17193/fd/1

La redirección real es complicada. Puede adjuntar un depurador al proceso en ejecución, cerrar el fd y abrirlo para un nuevo archivo. Pero con la creación de redes activas, supongo que esto debe hacerse rápidamente para evitar que se interrumpan las conexiones.

2
27.01.2020, 23:16

Como dice JdeBP, esto es imposible sin adjuntarlo como un depurador. Afortunadamente, existen programas para hacer exactamente eso de una manera totalmente -automatizada. Reptyr es uno de esos programas. Simplemente ejecute reptyr 17193y se volverá a conectar a su terminal.

2
27.01.2020, 23:16

Теги

Похожие вопросы