2
我想遍歷內核中的每個進程並修改task_struct
中的一些參數。我想我可以使用for_each_process()
宏來做到這一點。在Linux內核中使用for_each_process宏
但是,要安全地做到這一點,我必須確保當前沒有執行進程,並且在我參考其task_struct
後,我想鎖定它以便在修改時沒有其他人訪問它它。
我該如何實現這兩個目標?
我想遍歷內核中的每個進程並修改task_struct
中的一些參數。我想我可以使用for_each_process()
宏來做到這一點。在Linux內核中使用for_each_process宏
但是,要安全地做到這一點,我必須確保當前沒有執行進程,並且在我參考其task_struct
後,我想鎖定它以便在修改時沒有其他人訪問它它。
我該如何實現這兩個目標?
您可以使用:
int flags;
smp_wmb();
raw_spin_lock_irqsave(&task->pi_lock, flags);
do your stuff
raw_spin_unlock_irqrestore(&task->pi_lock, flags);
鎖定當前正在處理的任務。
好吧,我認爲for_each_process()受rcu鎖保護。所以至少可以保證別人在我使用它的時候不會釋放這些內存。現在問題仍然是如何在我修改它時保護它。 – contemplatingzombie 2011-12-18 02:39:27
本網站的受衆主要是用戶和管理員,而不是程序員,所以我認爲你的問題在[so]上會更好。不要在那裏轉發;我已請求版主遷移您的問題。 – Gilles 2011-12-18 23:26:51