如何将Linux进程分叉为Stopped状态?

时间:2015-10-05 22:38:37

标签: linux fork clone system-calls

我正在使用clone(2)电话开始新任务。

曾经有CLONE_STOPPED标志,但它不再存在于当前内核中。

是否有任何技巧可以在Stopped状态下启动任务(等待SIGCONT实际运行)?

2 个答案:

答案 0 :(得分:1)

你不能,在最近的内核中没有办法做到这一点,除非你编写内核模块来做到这一点。

您可以在kernel/fork.c (L1449)中看到内核v2.6.32如何使用它:

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);
}

在内核空间中写一个包装函数来做类似的事情应该是可能的(但可以说是微不足道的?)。

答案 1 :(得分:0)

孩子可以在执行SIGSTOP

的开头发送自己fn