Экранный сеанс завершается при сбое программы

Я запускаю программу в сеансе экрана, если программа сработает, она перезапустится сама, но когда программа выйдет из строя, сеанс сеанса завершается.

Я хочу, чтобы сеанс экрана оставался открытым, поэтому программа может перезагрузиться. Есть ли способ сделать это?

Я запускаю Linux Debian 7 Wheezy

One Solution collect form web for “Экранный сеанс завершается при сбое программы”

Вопрос в том, как странно сработает программа? Первые две вещи, которые мне приходят в голову:

  • программа отправляет своим последним умирающим дыханием некоторые странные контрольные последовательности, которые позволяют screen также выходить из строя / заканчиваться / думать, что лучше не позволять вам это видеть.
  • программа отправляет сигналы своим родительским процессам ( screen или, возможно, промежуточную оболочку ), которая их завершает.

Следующие шаги я бы постарался:

  1. Как точно заканчивается screen ? Убивает ли он весь screen процесс или только собственное окно (параллельные команды запуска экрана все еще живы, отключается ли сеанс экрана)?
  2. Если вы запускаете программу из оболочки, можете ли вы поймать сигналы, поступающие из программы, используя ловушку ?
  3. Он по-прежнему завершает работу screen если вы перенаправляете stdout и stderr в файл (что делает файл, если он больше не разбивается – мне любопытно). Возможно, вы все еще можете смотреть программу с помощью tail -f .
  4. ОК, обход не даст интересной информации, но существует ли такая же проблема при использовании tmux вместо screen ?

Редактировать 1 (объявление 1): программа сбоев может запускаться непосредственно с экрана, например

 screen /usr/local/bin/your/crashing/program 

или с процессом оболочки между ними (например, вы запускаете экранное окно с любимой оболочкой, затем запускаете программу, например

 screen /usr/local/bin/your/crashing/program 

или иметь сценарий оболочки, который выполняет респаунирование с чем-то вроде

 bash -c 'while true ; do /usr/local/bin/your/crashing/program ; done' 

На выходе pstree какие процессы задействованы:

 xterm(309)---bash(311)---screen(230)---screen(231)---bash(234)-+-less(323) `-pstree(322) 

В моем случае у меня есть начальный screen (230 и 231) из bash (311) в окне xterm (309) с другим bash (234), из которого я запускал pstree | less pstree | less (322 и 323).

Экран завершается, если выполняется дочерний процесс. Это нормальное поведение, а не крушение. Поэтому, если ваша программа запускается непосредственно на экране и сбой, экран также завершается. Если у вас есть программа, запущенная вручную в оболочке, эта оболочка должна снова представить свое приглашение после сбоя программы. Если окно экрана закрывается в этом случае, что-то на самом деле странно.

Было бы полезно узнать немного о кольцевой развязке, например, как вы начинаете и воспитываете свою программу.

  • Имитация оболочки оболочки GNU в tmux
  • запуск командной строки matlab на экране - не может быть введен после повторной привязки
  • Скопируйте большой (более 4k) выбор текста из буфера скроллинга экрана в системный буфер обмена
  • Как установить Cols и Lines для подпроцесса
  • Проблемы с обновлением vi внутри экрана
  • Как узнать, сколько окон открыто на экране GNU?
  • Как разделить сеансы экрана GNU
  • Имеет ли терминал-мультиплексор какую-либо выгоду при использовании с диспетчером оконной панели?
  • Запустить скрипт на экране
  • Запустить скрипт python в `screen` при загрузке?
  • Как сохранить вывод терминала в файл txt?
  • Linux и Unix - лучшая ОС в мире.