基本上我使用kthread_create()
創建了一個內核線程。 kthread反覆做某事。就像`kill -9`一樣,內核中有沒有殺死內核kthread的方法?
while() {
//do something
msleep_interruptible(1000);
}
同時,我想達到一定條件時殺死這KTHREAD(例如一個特定的系統調用被調用,或者一個特定的用戶空間進程被終止)。我已通讀kthread.c,但只發現kthread_stop()
,這不像kill -9
。它所做的只是設置KTHREAD_SHOULD_STOP
位kthread->flag
,並且在k線程函數體內必須調用kthread_should_stop()
來查詢該位並自行調用do_exit()
。
我已經嘗試了下面的這種方法。問題是當調用kthread_stop()
時,k線程通常處於睡眠狀態(即msleep_interruptible(1000)
)。因此,我總是觀察到呼叫kthread_stop()
和k線實際退出之間的延遲。這導致了我的項目無法忍受的延遲。我想要的就像kill -9
,也就是說,在我致電kthread_stop()
之後,k線程將立即終止。和想法,以實現這一目標?
while(!kthread_should_stop()) {
//do something
msleep_interruptible(1000);
}
您應該將您的解決方案作爲答案發布,而不是將其包含在問題中。 (這是完全可以接受的,甚至鼓勵,發佈,甚至接受自己的問題的答案。) – 2014-09-26 17:40:45
@KeithThompson謝謝你的建議。我已經從問題中刪除了我的解決方案,並將其作爲答案發布。 – w00dbunny 2014-09-26 21:07:22