Вопрос или проблема
Я использую Windows WSL2 и открыл только одну сессию терминала. Я использовал команды ps
и ps a
. Насколько я понимаю, bash с PID 559 – это оболочка, с которой я взаимодействую. Вопрос в том, почему у меня есть другой bash с PID 399? У меня по сути открыта только одна терминал. Другие сессии неактивны.
Ниже приведён ответ CLI.
mike@DESKTOP-3B9ANKQ:~$ ps a
PID TTY STAT TIME COMMAND
187 hvc0 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear --keep-baud - 115200,38400,9600 vt220
205 tty1 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear - linux
317 pts/1 Ss 0:00 /bin/login -f
399 pts/1 S+ 0:00 -bash
559 pts/0 Ss 0:00 -bash
591 pts/0 R+ 0:00 ps a
mike@DESKTOP-3B9ANKQ:~$ ps
PID TTY TIME CMD
559 pts/0 00:00:00 bash
592 pts/0 00:00:00 ps
Выполнение pstree
показывает
systemd─┬─2*[agetty]
├─cron
├─dbus-daemon
├─init-systemd(Ub─┬─SessionLeader───Relay(388)───bash───pstree
│ ├─init───{init}
│ ├─login───bash
│ └─{init-systemd(Ub}
├─polkitd───3*[{polkitd}]
├─rsyslogd───3*[{rsyslogd}]
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-resolve
├─systemd-timesyn───{systemd-timesyn}
├─systemd-udevd
├─unattended-upgr───{unattended-upgr}
└─wsl-pro-service───7*[{wsl-pro-service}]```
Ответ или решение
Когда вы запускаете терминал в WSL2 и видите несколько процессов bash, это может вызывать некоторое недоумение. Давайте подробно рассмотрим, почему в вашем случае появились два процесса bash с PID 399 и 559, и какие процессы за ними стоят, используя данные, предоставленные вами.
1. Понимание процессов в WSL2
WSL (Windows Subsystem for Linux) создает виртуализированную среду для работы Linux на Windows. Это означает, что каждый терминал, который вы открываете, может взаимодействовать с несколькими фоновыми процессами, которые необходимы для функционирования системы.
2. Описание выводов команд ps
В выводе команды ps a
мы видим следующее:
- PID 399: Этот процесс — наблюдаемый
-bash
, который запущен от одного из обеспечивающих процессов. Он отвечает за одну из сессий терминала. - PID 559: Это основной процесс
bash
, с которым вы работаете в интерактивном режиме в текущем терминале.
Команда ps
показывает текущий интерактивный сеанс, к которому вы подключены (559), в то время как команда ps a
отображает все запущенные процессы с терминалом, включая предыдущую загрузку сессии.
3. Почему два процесса bash
?
Причины существования двух процессов связаны с поведением оболочки и инициализацией сеансов:
-
Инициализация сеанса: При запуске терминала
bash
может запрашивать вход через другой процесс, который запускается до основной оболочки. Этот вспомогательный процесс может остаться активным в фоновом режиме для обработки команд или терминальных событий (например, возможность восстановления сессии после случайного завершения). -
Процесс логина: PID 399 был создан как процесс входа (
/bin/login -f
), который позволяет вам аутентифицироваться в системе. Даже если вы открыли только один сеанс, процесс логина остается активным для управления вашими параметрами сессии.
4. Получение дополнительной информации с помощью pstree
Когда вы используете команду pstree
, вы видите иерархию процессов в системе, где четко видно, что:
systemd
(или его эквивалент в WSL) управляет различными фоновыми процессами.SessionLeader
отвечает за управление текущим сеансом, включая создание и поддержание процессов, таких как вашbash
.
5. Заключение
Таким образом, наличие двух процессов bash
при открытии одного терминала в WSL2 абсолютно нормально. Это связано как с особенностями управления процессами в Linux-системах, так и с необходимостью поддержания рабочей сессии активной с помощью дополнительных процессов, таких как процесс логина и вспомогательные процессы. Такой подход обеспечивает более стабильную и гибкую среду для взаимодействия пользователя с системой.
Если у вас остались дополнительные вопросы о работе процессов в WSL2 или о других аспектах Linux, не стесняйтесь обращаться за разъяснениями!