2015-10-05 37 views
1

我開始使用clone(2)調用的新任務。如何在停止狀態下分配Linux進程?

曾經有CLONE_STOPPED標誌,但它在當前內核中不再存在。

是否有任何技巧在Stopped狀態下啓動任務(等待SIGCONT實際運行)?

+0

你這樣做的目的是什麼?如果這是出於調試的目的,你可能可以通過'PTRACE_O_TRACEFORK'使用'ptrace' – Hasturkun

+0

因爲我正在實現的API要求'spawn_thread()'在停止狀態下產生線程,等待'resume_thread()'。我沒有設計它 - 我只是在實施它。 – smoku

回答

1

你不能一開始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); 
} 

應該可以在內核空間寫一個包裝函數做同樣的事情(但可以說是不平凡?)。

+0

那麼......轉發該代碼是我正在考慮的一個選項。感謝您爲我打釘。 :) – smoku

0

孩子可以在執行fn

+0

這就是我到目前爲止所做的,但這不完全是問題所在。 :-) 其他進程賽跑到停止/繼續,如果它最初運行只是爲了停止自己的問題。 – smoku

+0

另外,事實證明,SIGSTOP是一個進程級別的處理信號,所以雖然SIGCONT可以執行任務,但SIGSTOP會停止整個任務組。 – smoku

相關問題