嗯,很明显,我们说有两个进程A
和F
。 F
想要在具有CPU控制权时分叉A
(并且A
因CPU处于F
而被暂停。
我已经谷歌搜索但是没有相关内容出现。在Unix环境中这样的事情是否可行?
答案 0 :(得分:2)
从外部克隆进程肯定没有标准和/或可移植的方法,但是根据操作系统的不同,肯定有可能将进程从其任务中转移出来并强制它自行克隆或做任何你想做的事情。
答案 1 :(得分:1)
不,这是不可能的。
fork()
系统调用会生成父级的副本,因此,如果您在fork()
进程中调用F
,则该子级将是F
的副本,其中包含你无能为力改变这种行为。
答案 2 :(得分:1)
不,这将是一个巨大的安全漏洞,如果可能的话,会导致敏感信息的泄漏。
最好的情况是,您可以在父进程中设置一个信号处理程序,它将fork(2)一个子进程(可能是exec(2)一个预先配置的子进程?)。
我认为通过查看具有CPU亲和性设置的两个进程之间的消息传递会更好地服务,但即便如此,我认为增益是名义上的(过度优化问题?)。
http://www.freebsd.org/cgi/man.cgi?query=cpuset&apropos=0&sektion=0
答案 3 :(得分:1)
我认为这不是一个好主意,但是流程F
可能会使用A
之类的调试器接口附加到ptrace
。做一些事情,比如暂停目标进程,保存其状态,转移进程以运行fork
,然后恢复其原始状态。
应该注意的是,你的克隆过程可能需要处理线程之类的一些奇怪的情况。
答案 4 :(得分:1)
这是不可能的原因是因为,通常使用fork()
,在两个进程之间开始有一个区别:fork()调用本身的返回值。如果在A
的代码中没有这样的调用,那么进程就没有办法在它们之间产生任何差异,所以它们都会做同样的事情,正常情况下你希望其中一个进程启动做不同的事。
你认为你想做什么应该如何运作?