Какое определение для "session" в linux?

12

Когда я запускаю команду "w", я вижу, как вошли два пользователя (оба - я). Быстрый поиск здесь говорит о том, что это нормально, потому что «один пользователь может иметь несколько активных сессий одновременно».

Что такое сессия? Почему у меня их два, когда я зашел в систему только один раз?

Ulkoma
источник

Ответы:

9

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

В большинстве разновидностей Linux оболочкой по умолчанию является bashи новый bashсеанс будет запускаться каждый раз, когда вы открываете новый терминал. В выводе, который wвы опубликовали, вы, похоже, имеете свой графический сеанс входа в систему (похоже, вы работаете на компьютере):

argento  :0        18set13 ?xdm?   2days  1.58s gdm-session-worker [pam/gdm-password]

Несколько эмуляторов открытых терминалов:

argento  pts/0     18set13 29:26m  5:26   5:26  rdesktop -g 1200x700 -u administrator -p XXXXXXXXX -d DOMAIN -K srv-wsus
argento  pts/1     18set13  9days  0.16s  0.16s /bin/bash
argento  pts/2     lun10    5.00s  0.09s  7.55s /usr/bin/python /usr/bin/terminator
argento  pts/3     14:40   33:41   0.09s  0.03s vim notes.txt
argento  pts/4     gio12   26:04m  0.10s  7.55s /usr/bin/python /usr/bin/terminator
argento  pts/5     14:56   17:33   0.11s  0.11s /bin/bash

И вы также, кажется, вошли в систему из неграфического tty:

argento  tty2      15:11    1:01   0.09s  0.09s -bash

Каждый из них является отдельным экземпляром вашей оболочки, и каждый считается как собственный сеанс.

terdon
источник
2

Я думаю, что каждый сеанс терминала является сеансом пользователя. У вас может быть несколько терминалов под X, и это виртуальные терминалы, или у вас может быть реальный терминал под консолью. Это все сессии. Это мой 'W'

$ w
 15:14:13 up 9 days,  6:02,  8 users,  load average: 1,03, 1,19, 1,31
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
argento  :0        18set13 ?xdm?   2days  1.58s gdm-session-worker [pam/gdm-password]
argento  pts/0     18set13 29:26m  5:26   5:26  rdesktop -g 1200x700 -u administrator -p XXXXXXXXX -d DOMAIN -K srv-wsus
argento  pts/1     18set13  9days  0.16s  0.16s /bin/bash
argento  pts/2     lun10    5.00s  0.09s  7.55s /usr/bin/python /usr/bin/terminator
argento  pts/3     14:40   33:41   0.09s  0.03s vim notes.txt
argento  pts/4     gio12   26:04m  0.10s  7.55s /usr/bin/python /usr/bin/terminator
argento  pts/5     14:56   17:33   0.11s  0.11s /bin/bash
argento  tty2      15:11    1:01   0.09s  0.09s -bash

Во втором столбце показан tty, поскольку вы можете видеть, что pts - это xterm (виртуальный терминал), а другой (tty2) - логин консоли.

Луиджи
источник
2

1. Хотя пользователь входит в единый процесс (оболочка, являющаяся его интерфейсом командной строки), пользователи заканчивают тем, что запускают много процессов в результате действий, подобных

-> Запуск неинтерактивного задания в фоновом режиме.
-> Переключение между интерактивными задачами через управление заданиями.
-> Запуск нескольких процессов, которые работают вместе через каналы.
-> Запуск оконной системы, такой как X Window System, которая позволяет открывать несколько окон терминала.

2. Для обработки всех этих процессов ядру необходимо сформировать группы процессов, состоящие из этих процессов.

3. Для дальнейшего управления этими группами процессов в соответствии с пользователем, эти группы делятся в соответствии с пользователем на сеансы. (Обратите внимание, что здесь пользователь не является пользователем Linux, но оболочка или терминал означает пользователя. Два терминала на одном компьютере зарегистрированы одним и тем же пользователем Linux. обозначает 2 разных пользователя и, следовательно, 2 разных сеанса пользователя. Терминал может управлять терминалом только для одного сеанса).
Процесс, который запускает оболочку для этого «пользователя» или сеанса, называется лидером сеанса.

4. Также обратите внимание на закрытие терминала нажатием кнопки «х», чтобы вы не вышли из этого терминала. Этот терминал продолжает работать в фоновом режиме. Если вы хотите перенести сеанс с терминала, вам нужно выйти из системы, нажав CTRL + D или выйти.

5. Когда вы выходите из терминала, ядро ​​отправляет сигнал SIGHUP (аналогично kill -1) процессу, который является лидером сеанса. Теперь все остальные процессы, выполняющиеся в терминале, являются дочерними для этого лидера сеанса. Эти дочерние процессы сформировали группы процессов, которые управляются этим процессом лидера сеанса (родительским процессом).

6. Процесс лидера сеанса отправляет SIGHUP каждому дочернему процессу, некоторые процессы завершаются, в то время как некоторые могут отказаться от завершения (приостановленные или запущенные в фоновом режиме). Те, кто предпочитает не прекращать, становятся осиротевшими как сеансовые оверны и сразу же принимаются процессом init (родителем всего процесса на машине linux).


Подробнее см . Ссылку Модель процесса разработки Linux

ЯТИН ГУПТА
источник
1

Сеанс - это каждая терминальная оболочка, управляемая процессами пользователя. Например, у меня сейчас запущено 3 сессии. Моя рабочая среда Mate и два окна терминала.

Vid Plavsic
источник