我有一個關於內核線程之間信號傳播的查詢。 這種情況是這樣的:被阻止的系統調用不會讓SIGKILL終止進程
從用戶空間應用程序進行系統調用,內核在系統調用中創建一個線程(讓它命名爲thread1)。
現在在thread1中,內核在while循環中循環並且被阻塞。主線程也在while循環中循環。 如果我做了一個「殺-9 <「用戶應用PID>」,該應用程序不能正常退出。即使/ proc入口仍然存在。 雖然在/ proc // FD文件夾爲空。
如果我把下面的主線程的while循環,它正確地並退出捕捉信號。如果我把在線程1的只有下面的while循環,主線程仍然不會退出。
if (signal_pending(current)) {
return;
}
能否請你建議,在這種情況下內核應該如何處理kill -9信號?在SIGKILL之後,進程的狀態變成Zombie。
該系統調用以下實現:
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 2013-05-02 10:39:20