Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Linux进程处于停止状态?_Linux_Fork_Clone_System Calls - Fatal编程技术网

如何使Linux进程处于停止状态?

如何使Linux进程处于停止状态?,linux,fork,clone,system-calls,Linux,Fork,Clone,System Calls,我正在使用克隆(2)调用启动新任务 以前有CLONE\u STOPPED标志,但它不再出现在当前内核中 在停止状态下启动任务(等待SIGCONT实际运行)有什么诀窍吗?孩子可以在执行的fn开始时发送自己的SIGSTOP你不能,在最近的内核中没有办法这样做,除非你编写一个内核模块来做 您可以在中看到内核v2.6.32是如何使用的: 在内核空间中编写一个包装函数来做类似的事情应该是可能的(但可以说不是微不足道的?)。这就是我到目前为止所做的,但这并不完全是问题所在。:-)如果一开始只是为了停止自身而

我正在使用
克隆(2)
调用启动新任务

以前有
CLONE\u STOPPED
标志,但它不再出现在当前内核中


在停止状态下启动任务(等待
SIGCONT
实际运行)有什么诀窍吗?

孩子可以在执行的
fn
开始时发送自己的
SIGSTOP

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

您可以在中看到内核v2.6.32是如何使用的:


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

这就是我到目前为止所做的,但这并不完全是问题所在。:-)如果一开始只是为了停止自身而运行,那么其他进程竞相停止/控制它会出现问题。此外,SIGSTOP是一个进程级处理信号,因此虽然可以SIGSTOP控制任务,但SIGSTOP将停止整个任务组。您这样做的目的是什么?如果这是出于调试目的,您可能可以将
ptrace
ptrace\u O\u TRACEFORK
一起使用,因为我正在实现的API要求
spawn\u thread()
在停止状态下生成线程,等待
resume\u thread()
。我没有设计它-我只是在实现它。嗯。。。转发代码也是我正在考虑的一个选择。谢谢你帮我钉上它。:)
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);
}