似乎subprocess.Popen ()和os.fork()都能够创建子进程.但我想知道两者之间的区别.你什么时候使用哪一个?我试着查看他们的源代码,但是我在我的机器上找不到fork()的源代码,并且不完全清楚Popen如何在Unix机器上工作.
有人可以详细说明吗?
谢谢
所以我为你阅读了文档。结果:
os.fork只存在于 Unix 上。它创建了一个子进程(通过克隆现有进程),但仅此而已。当它返回时,您有两个(大部分)相同的进程,都运行相同的代码,都从os.fork(但新进程0从os.fork父进程获取子进程的PID)返回。
subprocess.Popen更便携(特别是,它适用于 Windows)。它创建一个子进程,但您必须指定子进程应该执行的另一个程序。在 Unix 上,它是通过调用os.fork(克隆父进程),然后os.execvp(将程序加载到新的子进程中)来实现的。因为Popen是关于执行程序,所以它可以让您自定义程序的初始环境。您可以重定向其标准句柄、指定命令行参数、覆盖环境变量、设置其工作目录等。这些都不适用于os.fork.
总的来说,subprocess.Popen使用起来比较方便。如果您使用os.fork,则需要手动处理很多,而且它只能在 Unix 系统上工作。另一方面,如果你真的想克隆一个进程而不是执行一个新程序,这os.fork是要走的路。
subprocess.Popen 让你在自己的进程中执行一个任意的程序/命令/可执行文件.
os.fork只允许您创建一个子进程,该进程将从您调用它的确切行执行相同的脚本.顾名思义,它"简单地"将当前流程分为2.
os.fork仅适用于Unix,并且subprocess.Popen是跨平台的.