Традиционное Unix-понятие сессии имеет смысл для сеансов входа в текстовый терминал.
В сеансе X11 (это сеанс в общем смысле, а не в специфическом смысле Unix) все процессы обычно являются потомками процесса-лидера сеанса. Это может быть менеджер сеансов (если он есть), или оконный менеджер, или пусковой механизм (графическая оболочка), если он есть. Есть один процесс, который запускает сеанс X11 и чья смерть завершает сеанс, но его роль варьируется в зависимости от окружения рабочего стола.
Дерево процессов можно наблюдать с помощью pstree
(может не входить в установку по умолчанию) или ps axf
(только для Linux). Сервер X не является частью той же ветви дерева, что и другие программы; его роль заключается только в посредничестве при вводе и выводе, он никогда не участвует в запуске программ. Обычно вы видите либо xinit
, либо диспетчер отображения с двумя дочерними элементами, один из которых является X-сервером, а другой - лидером X-сессии.
Некоторые из ваших программ с графическим интерфейсом пользователя могут не быть прикреплены к этому дереву процессов, если их родительский процесс мертв (например, потому что они были запущены в фоновом режиме с помощью оберточного скрипта, который затем вышел).
реальное взаимодействие происходит между пользователем и оболочкой.
Только если вы фактически взаимодействуете с оболочкой. Когда вы взаимодействуете с другой программой, запущенной в терминале, оболочка не участвует. Вход и выход происходят непосредственно между программой и терминалом, оболочка просто сидит в фоновом режиме и ждет, когда программа выйдет или будет приостановлена.
Ошибка сегментации — это не то же самое, что сигнал SIGSEGV. Сигнал - это всего лишь сигнал. Когда у вас есть фактическая ошибка сегментации, тогда ядро зарегистрирует ее и впоследствии отправит сигнал SIGSEGV вашему приложению.
Логика, лежащая в основе этого, и почему ядро регистрирует только реальную ошибку сегментации, заключается в том, что ядро (и ЦП )обеспечивают соблюдение правил о том, какое адресное пространство имеет ваша программа и к которому разрешен доступ. Таким образом, когда эти правила нарушаются, именно он регистрирует действие.
Для правильного тестирования вам нужно сделать в коде что-то, что вызовет ошибку сегментации, например, доступ к неинициализированному указателю.