如何正确地将子进程分叉,不使用任何扭曲的子进程(但使用来自父进程的数据)(例如,处理父进程中某些数据的“快照”并将其写入文件,阻塞)?
似乎我在os.fork()
之后执行了像子进程中的干净关闭这样的事情,它关闭了父进程中的一些套接字/描述符;避免我看到的唯一方法就是做os.kill(os.getpid(), signal.SIGKILL)
,这似乎是一个坏主意(尽管不是直接问题)。
(另外,如果在父进程中更改了dict,它是否也会在子进程中发生变化?快速测试表明它不会改变。但OS /内核是debian stable / sid)
答案 0 :(得分:1)
IReactorProcess.spawnProcess
(通常以from twisted.internet import reactor; reactor.spawnProcess
提供)可以生成运行系统上任何可用可执行文件的进程。子进程不需要使用Twisted,甚至不需要使用Python。
请勿亲自致电os.fork
。正如您所发现的,它与流程状态有很多非常特殊的交互,spawnProcess
将为您管理。