我開始使用clone(2)
調用的新任務。如何在停止狀態下分配Linux進程?
曾經有CLONE_STOPPED
標誌,但它在當前內核中不再存在。
是否有任何技巧在Stopped狀態下啓動任務(等待SIGCONT
實際運行)?
我開始使用clone(2)
調用的新任務。如何在停止狀態下分配Linux進程?
曾經有CLONE_STOPPED
標誌,但它在當前內核中不再存在。
是否有任何技巧在Stopped狀態下啓動任務(等待SIGCONT
實際運行)?
你不能一開始SIGSTOP
發送自身,有沒有辦法做到這一點在最近的內核,除非你寫一個內核模塊做到這一點。
你可以看到內核v2.6.32怎麼用來做什麼的kernel/fork.c (L1449):
if (unlikely(clone_flags & CLONE_STOPPED)) {
/*
* We'll start up with an immediate SIGSTOP.
*/
sigaddset(&p->pending.signal, SIGSTOP);
set_tsk_thread_flag(p, TIF_SIGPENDING);
__set_task_state(p, TASK_STOPPED);
} else {
wake_up_new_task(p, clone_flags);
}
應該可以在內核空間寫一個包裝函數做同樣的事情(但可以說是不平凡?)。
那麼......轉發該代碼是我正在考慮的一個選項。感謝您爲我打釘。 :) – smoku
你這樣做的目的是什麼?如果這是出於調試的目的,你可能可以通過'PTRACE_O_TRACEFORK'使用'ptrace' – Hasturkun
因爲我正在實現的API要求'spawn_thread()'在停止狀態下產生線程,等待'resume_thread()'。我沒有設計它 - 我只是在實施它。 – smoku