Программы в / мусорном ведре или/usr/bin должны быть вызваны от оболочки?

Я запустил Chrome и Firefox от панели поиска и нашел, что они были также открыты от терминала

$ pstree -aps 5221 | head -10
systemd,1 splash
  `-gdm3,1027
      `-gdm-session-wor,2418
          `-gdm-x-session,2529 --run-script env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --session=ubuntu
              `-gnome-session-b,2545 --session=ubuntu
                  `-gnome-shell,2741
                      `-chrome,5221    
                          |-cat,5227
                          |-cat,5228
                          |-chrome,5232

Chrome был вызван от названной утилиты GUI gnome-shell.

Какое-либо установленное программное обеспечение должно работать от формы терминала?

Кроме того, я нашел терминал, от которого я работаю, не назван tty но

$ tty
/dev/pts/0

и не может общаться с tty2

$ echo "very strange long text" > /dev/tty2
$ grep -r  'very strange long text' /   2>/dev/null 

Однако grep не возвращает отправленное сообщение. Текст к tty2 потерян.

2
задан 19 January 2019 в 19:46

1 ответ

Для процессов нужен терминал?

Существует несколько вещей, которые необходимо понять для ответа на этот вопрос:

  • /usr/bin и /bin содержите исполняемые файлы
  • Оболочка является интерфейсом пользователю - она выполняет команды или выполняет функции, которые хочет пользователь; это похоже на рычаги и включает машину - Вы вытягиваете рычаг, и машина делает что-то
  • Оболочка GNOME является оболочкой графического пользовательского интерфейса, bash основанная на тексте оболочка. Они - также процессы и могут запустить новые через fork() и exec() вызовы.

Какое-либо установленное программное обеспечение должно работать от формы терминала?

Нет, не действительно. Самый первый процесс в системе, /sbin/init с PID 1 (и это systemd в Вашем случае), имеет не связанный терминал управления. На самом деле процесс демона не имеет терминала управления. Все процессы на Linux запускаются через два syscalls - fork() и exec() - где Вы сначала создаете "копию" исходного процесса, и затем через exec() Вы выполняете исполняемый файл, приложения в /bin и /usr/bin, или любое другое местоположение Вы указываете. Демоны могут сделать точно то же самое.

Таким образом в теории, я мог заставить демона обработать, который не имеет никакого терминала управления - никакого tty - и все же я мог использовать fork() и затем exec() выполнять что-то от /usr/bin. Конечно, команда, которую я называю, должна согласиться с этим - некоторые команды требуют наличия управления TTY для работы.

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


Shell по сравнению с tty

Заметьте, что имя процесса -gnome-shell,2741. Gnome Shell является оболочкой графического пользовательского интерфейса, это очень отличается от типичного основанного на тексте интерпретатора команд такой как bash или ksh. Можно запустить приложения, файлы, окна, хотя Вы взаимодействуете с ним через ярлыки и мышь намного больше, чем с основанной на тексте оболочкой.

TTY Вы используете /dev/pts/0 и /dev/tty2 две разных вещи полностью. Обычно /dev/ttyXX указывает на консольный драйвер, и /dev/tty2 файл устройств, который также связан со специальным драйвером TTY. /dev/tty[1-xx] обычно обозначайте виртуальные консоли, через которые можно получить доступ Ctrl+Alt+F1-7. По умолчанию существуют tty1 кому: tty7 открытый, с GUI на Ubuntu, принимающей значение по умолчанию к tty7. На других дистрибутивах GUI может быть на другом tty, например, если я вспоминаю правильно в Fedora, это было tty1. Конечно, существуют способы открыть больше чем 7 виртуальных консолей. Видеть Почему столько виртуальных консолей?

Каждая открытая вкладка и каждое новое окно окна терминала, которое Вы используете в графической оболочке - который будет иметь /dev/pts/x файл связан. pts часть обозначает "псевдотерминал". Они связаны с консолями, которые реализованы с помощью программного обеспечения и не представляют реальные аппаратные средства, например, когда Вы используете эмулятор терминала или соединение SSH.

Также важно отметить что оболочки такой как bash не tty, /dev/tty2 устройство, которому связали драйвер позади него. /bin/bash исполняемый файл и выполняется как сама команда. В то время как существуют процессы в ядре, которые справляются /dev/tty2 это не процесс; в отличие от этого, /bin/bash процесс, который можно запустить. И это на самом деле, что происходит, когда Вы открываете терминал - Ваше окно терминала запускается /bin/bash как процесс.

И конечно, можно записать в /dev/tty2 или /dev/pts/0 , если у Вас есть разрешение. Например, для использования /dev/ttyUSB0 или /dev/ttyACM0 для записи в Ардуино или другая встроенная система необходимо принадлежать dialout группа, которая владеет этими специальными устройствами. Эти два устройства эмулируют последовательную консоль, таким образом, можно отправить данные на подключенные устройства или программировать их. В случае специальных устройств как этот также необходимо рассмотреть скорость или baud rate в котором эти устройства чтение и отправляют данные.

См. также

3
ответ дан 2 December 2019 в 02:41

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

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