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

Может ли процесс, который был запущен в сеансе 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 ответ

Я знаю, что опаздываю, но со мной случалось то же самое несколько раз. Среда немного отличается, я запускаю скрипт на языке Python во внешнем интерфейсе, который отправляет задания, перемещает файлы, собирает больше заданий и т. Д. Одно вычисление обычно занимает около часа.

Однажды вечером я запустил свой скрипт на python, несколько раз проверил его, а затем оставил tmux в режиме прокрутки, отсоединился и проверил скрипт утром. Казалось, что он застрял, поэтому я проверил, выполнялись ли какие-либо работы в данный момент, но ни одна из них не была. Я проверил, присутствовали ли ожидаемые файлы, чего не было. Мой сценарий не распечатывал примечание "все работы выполнены успешно", поэтому он все еще работал, но ничего не делал. Я вышел из режима прокрутки, и неожиданно сценарий продолжился, произвел намного больше вывода и, о чудо, отправил еще одну партию вычислительных заданий.

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

Вы когда-нибудь выясняли, почему / если ваш сценарий застрял? Я выйду из режима прокрутки с этого момента, прежде чем отсоединяться, и посмотрю, имеет ли это значение.


Редактировать: Очевидно, это была известная ошибка в tmux, но не было замечено, исправлена ​​ли она: https://github.com/tmux/tmux/issues/431. Версия tmux на машине, на которой я работаю, устарела: tmux 1.8, Итак, по сути, обходной путь будет:

Всегда выходите из режима прокрутки и правильно отсоединяйтесь от tmux.

Может ли процесс, который был запущен в сеансе 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,

Другие вопросы по тегам