Переключение видимости сообщений об ошибках сегментации в dmesg

Традиционное Unix-понятие сессии имеет смысл для сеансов входа в текстовый терминал.

В сеансе X11 (это сеанс в общем смысле, а не в специфическом смысле Unix) все процессы обычно являются потомками процесса-лидера сеанса. Это может быть менеджер сеансов (если он есть), или оконный менеджер, или пусковой механизм (графическая оболочка), если он есть. Есть один процесс, который запускает сеанс X11 и чья смерть завершает сеанс, но его роль варьируется в зависимости от окружения рабочего стола.

Дерево процессов можно наблюдать с помощью pstree (может не входить в установку по умолчанию) или ps axf (только для Linux). Сервер X не является частью той же ветви дерева, что и другие программы; его роль заключается только в посредничестве при вводе и выводе, он никогда не участвует в запуске программ. Обычно вы видите либо xinit, либо диспетчер отображения с двумя дочерними элементами, один из которых является X-сервером, а другой - лидером X-сессии.

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


реальное взаимодействие происходит между пользователем и оболочкой.

Только если вы фактически взаимодействуете с оболочкой. Когда вы взаимодействуете с другой программой, запущенной в терминале, оболочка не участвует. Вход и выход происходят непосредственно между программой и терминалом, оболочка просто сидит в фоновом режиме и ждет, когда программа выйдет или будет приостановлена.

2
20.02.2018, 15:25
1 ответ

Ошибка сегментации — это не то же самое, что сигнал SIGSEGV. Сигнал - это всего лишь сигнал. Когда у вас есть фактическая ошибка сегментации, тогда ядро ​​​​зарегистрирует ее и впоследствии отправит сигнал SIGSEGV вашему приложению.

Логика, лежащая в основе этого, и почему ядро ​​регистрирует только реальную ошибку сегментации, заключается в том, что ядро ​​(и ЦП )обеспечивают соблюдение правил о том, какое адресное пространство имеет ваша программа и к которому разрешен доступ. Таким образом, когда эти правила нарушаются, именно он регистрирует действие.

Для правильного тестирования вам нужно сделать в коде что-то, что вызовет ошибку сегментации, например, доступ к неинициализированному указателю.

1
27.01.2020, 22:18

Теги

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