Почему существует два последовательных экранных процесса?

Переменная для деталей подтверждения является "Примечаниями: $SERVICEACKCOMMENT$" я нашел это здесь: http://kylepikelinux.blogspot.com/search/label/$SERVICEACKCOMMENT$%20acknowledgment%20Nagios%20email%20alerts

Я понял, что у нас уже был он набор, но буквально никто не был Acking ничто O_o

2
07.08.2014, 14:31
2 ответа

Внешний экран (PID 6649) подключается к терминалу, с которого вы начали, и закрывается при отсоединении ( Ctrl + a , d ).

Внутренний экран (PID 6650) не подключен к этому терминалу, а скорее управляет своим собственным псевдотерминальным (pty) устройством, к которому bash запустил с подключено.

Когда вы вводите что-то на внешнем терминале, внешний экран получает это, отправляет через сокет на внутренний экран, а тот, в свою очередь, перенаправляет ввод на pty, которым он управляет. , поэтому в конечном итоге он достигает bash (или любой другой программы, запускаемой из bash и управляемой через тот же pty). Вывод из bash (или любой запущенной из него программы) будет отправлен на pty внутреннего screen , в результате чего внутренний screen отправит его через сокет на внешний screen , который в конечном итоге отправляет его на терминал, с которого вы запустили screen (который в вашем случае снова является pty, созданным ssh ). Обратите внимание, что сокет управляется внутренним экраном , который позволяет отсоединять и повторно присоединять (см. Ниже).

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

Если вы снова войдете в систему (создадите еще один pty), а затем вызовете screen -r , вновь созданный экземпляр screen будет подключен к терминалу, с которого вы его запустили ( который полностью отделен от того, с которого был запущен первый экземпляр, поскольку вы его уничтожили), а затем используйте сокет, предоставленный внутренним экземпляром screen , чтобы повторно подключиться к внутреннему screen , который затем отправит текущее состояние своего собственного pty на «внешний» экран для повторного отображения; после этого происходит та же линия передачи ввода / вывода, что и в предыдущем экземпляре внешнего screen .

Если вы сейчас выполните pstree , вы найдете две строки с screen : одна начинается с sshd и заканчивается на новый экземпляр «external» screen , и один, начинающийся с экземпляра «internal» screen , у которого больше нет родителя, так как он завершился, когда вы отсоединили экран screen .

Вкратце:

  • «Внешний» экран (PID 6649) соединяется с терминалом, с которым вы взаимодействуете (в вашем случае, pty, установленным ssh ), и живет только как пока вы подключены к экземпляру screen .
  • «Внутренний» экран (PID 6650) предоставляет отдельный элемент для программ, которые вы запускаете под экраном, а также предоставляет сокет, используемый для передачи состояния терминала между внешним и внутренним экземплярами экрана . Он живет до тех пор, пока вы не отключите экран (в отличие от отсоединения).
  • Разделение необходимо, чтобы позволить управляемым программам пережить смерть внешнего элемента (путем подключения к другому элементу управления, который вместе со своим управляющим процессом - внутренним экраном ) - переживает отделение от внешнего элемента. терминал), а также для повторного подключения (за счет наличия уцелевшего внутреннего экрана , обеспечивающего сокет, к которому могут подключаться новые экземпляры экрана ).
2
27.01.2020, 22:13

Я предполагаю, что причиной второго процесса (того, который имеет PID 6650 в вашем примере) является закрытие tty-соединения (stdin, stdout и stderr), чтобы вы могли выйти из системы. войдите позже, чтобы пересдать экран.

Как видите, PID 6650 не подключен к tty (в столбце TTY написано «?»).

0
27.01.2020, 22:13

Теги

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