Вопрос

Я знаю / sbin / init имеет специальную защиту от Sigkill и Sigstop из ядра по очевидным причинам.

Я пытался сообщить ядру, я хочу получить Sigstop с IOCTL () (похожим на Sigabrt и Sigsegv Reqs в Main ()):

if (ioctl (0, KDSIGACCEPT, SIGSTOP) == 0) {
    nih_signal_set_handler (SIGSTOP, stop_handler);

Но остановка не приходит к stop_handler () (от всего, что я знаю, как nih_error () не печатается в журналах).

В Stop_Handler () я сбрасываю SIGHANDLER STOP Sighandler в SIG_DFL (в противном случае он вернется в наш обработчик в любом случае), но это, вероятно, приводит к тому, что он снова игнорируется ядром.

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

Это было полезно?

Решение

Вам нужно будет взять флаг Signal_unkillable из флагов SignalcteCluct структуры задач.

По умолчанию (т. Е. Всегда на немодифицированных системах Linux) Signal_unkillable флаг устанавливается на флаги INITILE_STRUCT.

Вы можете написать модуль ядра, который будет платить целевой структурой INIT, чтобы изменить его, то вы сможете отправить сигнал остановки на init.

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


Разъяснение: Это структура INEREL, а не является частью источника INIT, а также не доступна или не видно из пользовательского пространства. Чтобы изменить его, вам нужно будет написать код ядра или исправлять ядро. Это было бы довольно тривиально, я представляю, чтобы написать модуль ядра, который просто взломает его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top