Я запустил 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 потерян.
Существует несколько вещей, которые необходимо понять для ответа на этот вопрос:
/usr/bin
и /bin
содержите исполняемые файлыbash
основанная на тексте оболочка. Они - также процессы и могут запустить новые через fork()
и exec()
вызовы.Какое-либо установленное программное обеспечение должно работать от формы терминала?
Нет, не действительно. Самый первый процесс в системе, /sbin/init
с PID 1 (и это systemd
в Вашем случае), имеет не связанный терминал управления. На самом деле процесс демона не имеет терминала управления. Все процессы на Linux запускаются через два syscalls - fork()
и exec()
- где Вы сначала создаете "копию" исходного процесса, и затем через exec()
Вы выполняете исполняемый файл, приложения в /bin
и /usr/bin
, или любое другое местоположение Вы указываете. Демоны могут сделать точно то же самое.
Таким образом в теории, я мог заставить демона обработать, который не имеет никакого терминала управления - никакого tty - и все же я мог использовать fork()
и затем exec()
выполнять что-то от /usr/bin
. Конечно, команда, которую я называю, должна согласиться с этим - некоторые команды требуют наличия управления TTY для работы.
В этом вопросе кажется, что большой беспорядок состоит в том, что оболочка совпадает с tty, однако они отличаются - 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
в котором эти устройства чтение и отправляют данные.