python os.fork() 循环输出使用方法

代码傈子:

import os
 
 
def main():
  for i in range(0, 2):
    os.fork()
    print 'Hello world!!'
 
 
if __name__ == '__main__':
  main()

猜测一下,会输出几行 hello world!!。

执行代码输出:

Hello world!!
Hello world!!
Hello world!!
Hello world!!
Hello world!!
Hello world!!

6行!为什么呢?

首先,你要明白os.fork()创建的子进程会接着下一行代码继续执行,它有返回值,返回值可以为0表示子进程或者大于0表示父进程pid,os.getpid()返回的是当前进程的pid,那么我们再改改输出来看得更直观一些吧:

import os
 
 
def main():
  for i in range(0, 2):
    pid = os.fork()
    print "Hello world ->", i, os.getpid(), pid
 
 
if __name__ == '__main__':
  main()

输出是这样的:

Hello world -> 0 9760 9761
Hello world -> 0 9761 0
Hello world -> 1 9760 9762
Hello world -> 1 9762 0
Hello world -> 1 9761 9763
Hello world -> 1 9763 0

这就很容易解释了:

第一轮循环,父进程创建了一个子进程P1然后打印,子进程P1接着下面的代码运行,打印。之后进入第二轮循环;

第二轮循环,父进程创建了一个子进程P2然后打印,子进程P2接着下面的代码运行,打印。子进程P1再创建了一个子进程P12然后打印,子进程P12接着下面的代码运行,打印。之后循环结束,共打印六次。

本文链接:https://www.jhelp.net/p/2QF4xPHqbcOz83mF (转载请保留)。
关注下面的标签,发现更多相似文章