2011-11-08 52 views
0

我正在爲linux創建一個內核模塊。我想知道,我怎樣才能阻止某個進程安排在指定的時間? sched.c中有一個函數可以做到這一點嗎?是否有可能在特定的時間段內將特定的task_struct添加到等待隊列中,或者將schedule_timeout用於特定的進程?阻止進程正在計劃中

謝謝

+0

你想讓當前任務睡眠嗎?或者你想要一個任務強制另一個任務進入睡眠狀態? – Karmastan

+0

我認爲答案與此問題相同: http://stackoverflow.com/questions/7695124/is-it-possible-to-block-a-task-from-kernel-space/9073821# 9073821 –

+0

是的,這是可能的。看看linux內核互斥鎖代碼如何做到這一點。 http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/kernel/mutex.c#L142 –

回答

0

延遲一段時間的進程調度等於讓它休眠。在驅動程序,這通常與msleep進行()(工作任務中常見),或過程,通過該過程放入可中斷睡眠模式

set_current_state(TASK_INTERRUPTABLE); 
schedule_timeout(x*HZ); 

內核將不會再安排任務,直到超時過期或收到信號。