Взаимодействие с под управлением интерактивной консольной программой от другого процесса

Это зависит от Вашего менеджера по оформлению! (т.е. KDM, GDM)

Примите во внимание свои выполнения DM как корень! (этому нужны полномочия пользователя root для выполнения процесса сессии как пользователь, Вы входите в систему),

При нажатии на завершение работы в KDE или GNOME DE отправляет сигнал в DM, чтобы выключить или перезапустить после того, как сессия завершилась. Затем Ваша DE говорит каждой программе заканчиваться и после того как весь другой процесс завершился (или истек тайм-аут), последний процесс Вашего DE - процесс сессии - завершается.

Процесс сессии является первым процессом, запущенным на сессии X11. Когда это уничтожается, или это завершается, сессия завершается. Вы когда-либо видели что xterm при выполнении X без DE? Это - процесс сессии. Этот процесс называют kdeinit в KDE и gnome-session в GNOME.

После того как сессия завершилась, управление возвращается к Вашему DM (который ожидал этих X процессов для окончания), и это проверяет то, что DE сказал ему делать. Если это сказало этому выключать или перезапускать, это сделает это. В другом случае это только запустит новый экран входа в систему в X.

Это также связано с проблемами, которые Вы, возможно, имели в прошлом с некоторым DE, не бывшим способным выключить или перезапустить, только выйти из системы при использовании в сочетании с некоторым другим DMS.

В любом случае это так плохо не документируется. GDM имеет страницу руководства команды, которая позволяет Вам говорить ему завершать работу точно так же, как я сказал прежде (gdm-control). KDM имеет превосходную документацию также и имеет подобную (немного более сложную) названную утилиту kdmctl.


Завершение работы и перезапуск возможны без PolicyKit, но PolicyKit служит многим целям, необходимым в в наше время системах как монтирующиеся диски, не будучи корнем, приостановите или будьте в спящем режиме компьютер. И это ни один плохо не документируется!

Проверьте это, если Вы хотите знать больше о том, что является PolicyKit и как делает он работает: http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html

5
27.09.2014, 01:41
2 ответа

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

Как скелеты минимальный пример того, что вы хотите, давайте создадим FIFO:

$ mkfifo in

FIFO А является специальным файлом, который один процесс может записать в то, в то время как другой процесс читает из него. Позволить создать процесс для чтения из нашего файла FIFO в :

$ python <in &
[1] 3264

Теперь, давайте отправим python команда для выполнения от текущей оболочки:

$ echo "print 1+2" >in
$ 3

вывод от python 3 и появляется здесь на stdout. Если мы перенаправили stdout Python, он мог бы быть отправлен в другое место.

то, Что ожидают , делает

, ожидают , позволяет вам автоматизировать взаимодействие с присоединенной командой. Как пример того, что ожидают , может сделать, создать файл:

#!/usr/bin/expect --
spawn python
expect ">>>"
send "print 1+2\r"
expect ">>>"

Затем петляйте с , ожидают :

$ expect myfile
spawn python
Python 2.7.3 (default, Mar 13 2014, 11:03:55) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 1+2
3
>>> 
7
27.01.2020, 20:38

Да, это то, что вы можете сделать с ожиданием, где ваш ожидаемый скрипт - это ваша программа B. В основном, он ожидает какую-то строку (может быть, командную строку), а затем посылает ответ.

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

0
27.01.2020, 20:38

Теги

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