8

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

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

4 ответа4

5

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

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

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) - логин консоли.

1

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

1

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

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

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

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

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

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

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


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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .