что происходит, когда менеджер окон помещается в фон

Нет.

После того как Вы выбираете -w FILENAME это сохраняет пакеты необработанных данных, поскольку они проникают через ссылку. Буквально нет большего количества детали, которую это может сохранить в файл. -vvv только релевантно, когда Вы отображаете его для проверки, осуществляемой человеком... И почти во всех случаях, где Вы хотите, чтобы люди считали вывод, я рекомендую использовать Wireshark.

2
03.10.2016, 04:08
2 ответа

Это - на самом деле два совершенно других явления.

less самостоятельно не потрудился проверять, является ли это в фоновом режиме (это типично для программ, которые взаимодействуют с терминалами). Универсальный терминальный драйвер в ядре отслеживает то, какой процесс ¹ находится на переднем плане. Может только быть один приоритетный процесс (более точно одна группа процесса). Оболочка делает системный вызов (tcsetpgrp) когда fg встроенный используется для помещения процесса в передний план. Этот системный вызов заставляет указанный процесс становиться приоритетным процессом.

Когда процесс пытается читать из терминала ², если это не находится на переднем плане, терминальный драйвер отправляет процессу сигнал SIGTTIN. По умолчанию этот сигнал приостанавливает процесс (как SIGSTOP). Точно так же фоновый процесс, который пытается записать в его терминал управления, получает SIGTTOU. Большинство оболочек обычно отображает сообщение как [1] + suspended (tty output) less myfile когда это происходит.

Для получения дополнительной информации о терминалах, см. описание общего терминального интерфейса в стандарте POSIX. (Это не легкое чтение. Это намного больше, чем, что должны знать большинство пользователей и еще больше программистов.)

Менеджер окон не взаимодействует с терминалами, таким образом, понятие фоновых и приоритетных процессов в терминалах не относится к нему. Что продолжается существует то, что X-сервер ³ завершается, когда X сессий завершаются. Сценарий, который это называет менеджером окон, говорит, что сделать на сессии. Если Вы помещаете менеджер окон в фоновом режиме и позволяете сценарию сессии выйти, не ожидая менеджера окон, это заставляет сессию заканчиваться ранее, чем Вы ожидали.

¹, Какая группа процесса, на самом деле (например, конвейер), но мы не должны входить в этот уровень детализации здесь.
² Только к его управлению termina на самом деле.
³ часть бэкенда GUI, который выполняет заказы потянуть окна, читают вход и т.п. из приложений

2
27.01.2020, 22:01
  • 1
    Спасибо за Ваш ответ. У меня есть определенно все ответы несколько раз. 1. Я понимаю, что X сессий заканчиваются, когда .xsession сценарий заканчивается, и имеющий некоторый процесс на переднем плане предотвращает сценарий для завершения. 2. В моем примере кода я понимаю это less получил бы SIGTTIN. почему делает less выход, когда это поместило в фон? 3. можно ли обратиться к некоторому материалу для приобретения знаний о переднем плане и фоновых понятиях, связанных с X? 4. можно ли обратиться к некоторому существенному материалу для изучения на как X передает вход X клиентские приложения/менеджер окон? –  rag 01.03.2013, 22:52
  • 2
    @rag 2. less не выходит, когда Вы помещаете его в фоновом режиме. Это выходит при закрытии терминала. 3. X не имеет переднего плана/фона в этом смысле. 4. Ищите X событий. –  Gilles 'SO- stop being evil' 04.03.2013, 03:35
  • 3
    еще раз спасибо. но less кажется, выходит с тем конкретным примером, который я имею. я не могу найти a less процесс больше. –  rag 04.03.2013, 10:10

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

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

Поэтому a .xsession сценарий обычно создается так, чтобы последней вещью, которую выполняет сценарий, был продолжительный какой-то процесс, связанный с сессией. Это мог быть менеджер окон, или это мог быть менеджер сеансов (более типичный под современной необычной настольной средой). Этот процесс или выполняется с exec так, чтобы это заменило оболочку, которая работает .xsession или это выполняется как приоритетный процесс так, чтобы оболочка ожидала его. Так или иначе, когда этот процесс выходит, концы сессии.

Ваш сценарий оболочки в качестве примера запускается less в фоновом режиме и затем сразу выходит. Это не ожидает фонового процесса. Это выходит независимо от действительно ли less делает. less мог бы продолжить работать в фоновом режиме, но, независимо от того, что запущено Ваш сценарий оболочки не обратит внимания на это. A .xsession сценарий, который создается таким же образом, будет иметь ту же проблему.

2
27.01.2020, 22:01
  • 1
    благодарит за Ваш ответ. у меня все еще есть несколько сомнений. 1. Вы говорите, что выполнения X-сервера на переднем плане, чтобы получить ввод данных пользователем и перейти к менеджеру окон так, чтобы wm мог работать в фоне? 2. в моем примере Вы подсказываете, что сам сценарий является процессом удара, который запускает дочерний элемент 'меньше' процесс и когда он выходит, он отправляет некоторый сигнал, заставляющий 'меньше' завершаться? я перепутан с этим битом. можно ли объяснить, почему, когда родительский сценарий удара выходит, он заставляет дочерние фоновые процессы завершаться? –  rag 01.03.2013, 01:33
  • 2
    1. X-сервер не работает на "переднем плане" или "фоне", поскольку те условия определяются со ссылкой на управление терминалами и управлением заданиями (См. ответ Жабр для получения дополнительной информации об этом). –  Celada 01.03.2013, 02:25
  • 3
    2. сценарий оболочки (который не является сценарием удара здесь, а общим сценарием оболочки) не отправляет сигнала в less заставить это завершаться. После того, как сценарий оболочки существует, less теряет его родителя, наследован init, и самостоятельно. Это может продолжиться, если это хочет, или нет. В данном случае, less интерактивный процесс, и он не может взаимодействовать с терминалом управления, если это не приоритетный процесс, таким образом, он не выполнит много. Однако в случае .xsession и менеджер окон, нет никакого терминала управления и никакого интерактивного процесса. Любой процесс может работать. ре –  Celada 01.03.2013, 02:30
  • 4
    : "объясните, почему, когда родительский сценарий удара выходит, он заставляет дочерние фоновые процессы завершаться". Это не имеет этого эффекта вообще. –  Celada 01.03.2013, 02:31
  • 5
    я действительно ценю для ответа на все те вопросы. –  rag 01.03.2013, 22:10

Теги

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