2011-12-18 284 views
2

我想遍歷內核中的每個進程並修改task_struct中的一些參數。我想我可以使用for_each_process()宏來做到這一點。在Linux內核中使用for_each_process宏

但是,要安全地做到這一點,我必須確保當前沒有執行進程,並且在我參考其task_struct後,我想鎖定它以便在修改時沒有其他人訪問它它。

我該如何實現這兩個目標?

+0

好吧,我認爲for_each_process()受rcu鎖保護。所以至少可以保證別人在我使用它的時候不會釋放這些內存。現在問題仍然是如何在我修改它時保護它。 – contemplatingzombie 2011-12-18 02:39:27

+0

本網站的受衆主要是用戶和管理員,而不是程序員,所以我認爲你的問題在[so]上會更好。不要在那裏轉發;我已請求版主遷移您的問題。 – Gilles 2011-12-18 23:26:51

回答

0

您可以使用:

int flags; 
smp_wmb(); 
raw_spin_lock_irqsave(&task->pi_lock, flags); 
do your stuff 
raw_spin_unlock_irqrestore(&task->pi_lock, flags); 

鎖定當前正在處理的任務。