У меня есть запрос относительно распространения сигналов между потоками ядра. Сценарий выглядит следующим образом:Заблокированный системный вызов не позволяет SIGKILL убить процесс
Из приложения для пользовательского пространства выполняется системный вызов, ядро создает поток (позволяет назвать его thread1) внутри системного вызова.
Теперь внутри этой строки1 ядро зацикливается в цикле while и блокируется. Основной поток также зацикливается в цикле while. Если я выполняю «убить -9 <«приложение пользователя PID>», приложение не может выйти должным образом. Даже запись/прок все еще существует. Хотя/Proc // FD папка становится пустым.
Если я ставлю следующее время цикла основного потока, он ловит сигнал правильно и выходит. Если я ставлю следующий только в thread1 в то время как цикл, основной поток до сих пор не выходит.
if (signal_pending(current)) {
return;
}
Можете ли вы предложить , как ядро должно вести себя в этом случае с сигналом kill -9? После SIGKILL состояние процесса становится зомби.
Системный вызов имеет следующие реализации:
thread1 = kthread_create(thread_fn, NULL, "thread1");
if (thread1) {
wake_up_process(thread1);
}
printk(KERN_NOTICE "Main thread: current:%s\n", current->comm);
while(1) {
DELAY_SEC(1)
thread_fn является:
int thread_fn(void* data)
{
while(1) {
DELAY_SEC(1)
}
}
Привет,
Соника
Как вы создаете процесс, который остается зомби? – alk