Может ли процесс, который был запущен в сеансе tmux, заснуть? Если да, то какова причина (причины), как предотвратить это?

Пример причины вопроса: вчера я начал процесс на сервере (обучая нейронные сети, он выводит текущую эпоху обучения на стандартный вывод). У меня было разделенное окно, и в том, в котором запущен процесс, я отключил режим прокрутки перед отключением от сеанса.

Сегодня я возвращаюсь, и это не сделало никакого прогресса вообще.

Точнее, эпоха такая же. После выхода из режима прокрутки, теперь он счастливо продолжился.

Журнал читает что-то вроде

...
Эпоха 40: 1ч несколько минут
Эпоха 41: 12 ч несколько минут
Epoch 42: 12h еще несколько минут
...
Эпоха 73:13

Это означает, что время, которое потребовалось, чтобы добраться от эпохи 0 до 49, было определенно меньше чем два часа; с эпохи 40 до 41 года это заняло около 11 часов (!), с эпохи 41 до 76 среднее время за эпоху составляло около 1,7 минуты. Эпохи находятся в цикле, и не должно быть причины, почему один занимает в 400 раз больше времени, чем другие.


Дополнительная информация: этот «сон» не происходит каждый раз, когда я отсоединяюсь, находясь в режиме прокрутки. Но это уже случилось раньше. Режим прокрутки может вообще не иметь к этому никакого отношения.

Программа представляет собой скрипт на языке Python, включающий в себя код тензорного потока, работающий на графическом процессоре; команда для запуска была:

python train_script.py 2>&1 | tee train_log.txt.

Для tmux я использую tmux attach для повторного присоединения, стандартное сопоставление клавиш и ctrl-b + d для отсоединения, ctrl-b + up(number block) для начала прокрутки, q для выхода из режима прокрутки.

1 ответ1

0

Может ли процесс, который был запущен в сеансе tmux, заснуть?

По сути, все, что делает tmux - это прикрепляет собственные файловые дескрипторы вместо STDIN/STDOUT/STDERR к работающему процессу внутри tmux что позволяет ему работать, когда он отсоединен от консоли.

Ниже приведен простой скрипт, который вы можете запустить, используя тот же рабочий процесс (присоединение / отсоединение от сеанса tmux ), который вы описали:

#!/bin/sh

c=1000

while [ $c -ne 0 ]; do
  date '+%Y-%m-%dT%H:%M:%S' | tee -a log.txt
  sleep 1
done

даже если бы вы переключились в режим прокрутки, а затем отключились от сеанса tmux , он все равно продолжал бы работать, вы можете проверить файл log.txt , чтобы не было проблем с tmux .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .