Почему ядро ​​вообще посылает SIGKILL? [дубликат]

Вы можете просто стереть раздел arch во время установки windows 10 , но будьте осторожны, все данные внутри раздела arch будут исчезнуть.

Если на вашем компьютере уже установлена ​​ windows 10 , и вы не хотите повторять всю установку, вы можете загрузиться с живого компакт-диска ubuntu и использовать os-uninstaller ( здесь - руководство) для простого удаления любой ОС.

8
13.12.2018, 20:42
4 ответа

Этот ответ частично верен, для завершения процесса нужно сделать больше, чем для освобождения памяти. Однако SIGKILL— это не похлопывание по плечу и не просьба что-то сделать, это один из немногих сигналов, который процесс не может игнорировать или обрабатывать. Это означает, что SIGKILLвсегда обрабатывается обработчиком ядра по умолчанию, и это действие по умолчанию, как и для большинства сигналов, заключается в завершении процесса, получающего сигнал. Часть программы, находящаяся в пользовательском пространстве, даже не увидит сигнал, поэтому нет запроса на какое-либо действие, не требуется никакого сотрудничества, и поэтому программа не может вести себя неправильно при получении SIGKILL, будь то по злому умыслу или по какой-то программе. ошибка. Вместо этого сторона ядра процесса будет обрабатывать сигнал и завершать процесс. Таким образом, ядро ​​напрямую завершает процесс, сообщая другой части ядра, что процесс должен быть завершен.

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

2
27.01.2020, 20:09

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

-1
27.01.2020, 20:09

Пользователь -пространственная часть процесса, завершенного SIGKILLникогда не узнает об этом; ядро ​​занимается всем . (Это означает, что из некоторых ресурсов может происходить утечка :временных файлов, выделения разделяемой памяти, ресурсов, удерживаемых от имени убитого процесса другим процессом, например X-сервером…)

Однако сигнал по-прежнему должен быть доставлен, чтобы другие процессы могли узнать, как был завершен убитый процесс. Родитель, используя wait, получит информацию о том, что убитый процесс был завершен с помощью SIGKILL.

17
27.01.2020, 20:09

Обзор того, как работают сигналы, чтобы завершить другие очень хорошие ответы:

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

Это два случая, когда сигнал обрабатывается :, когда процесс возвращается в пользовательское пространство после завершения системного вызова,или когда он выходит из прерываемого сна и возобновляет выполнение. В обоих случаях процесс находится в пространстве ядра. Прежде всего ядро ​​проверяет, ожидает ли процесс какой-либо сигнал, и действует в соответствии с ним. Например, если для сигнала определен обработчик, он заставляет процесс выполнять его по возвращении в пользовательское пространство. Как вы сами сказали, случай с KILL особенный, потому что его нельзя захватить. Итак, на самом деле это простой случай для ядра :возврат в пространство пользователя отменяется, и процесс сразу же уничтожается, что означает, что он больше не будет выполнять какой-либо код в пространстве пользователя, его память освобождена, его родительский процесс уведомлен о его смерти и т. д.

2
27.01.2020, 20:09

Теги

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