如何使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);
}