python学习之fork 父进程与子进程的理解

我觉得关于子进程和父进程还是比较难理解的,所以分成两部分来分析

一、先来理解子进程和父进程的工作原理

在Python中,使用os.fork()之后,在内存中把父进程的代码及内存分配情况拷贝一份生成子进程的运行空间,这样子进程的所有代码都与父进程一样,两个进程之间的运行是独立的,互不影响。在父进程中获取到的pid是子进程的pid号,在子进程中获取的pid是0,所以下程序运行出的结果可以看出,子进程输出的pid是0,父进程输出的pid是子进程的id号2381。当运行os.fork()这个脚本时,会有两个独立的运行空间来执行,在父进程运行空间中执行如下程序,由于读取到的pid是子进程的id号,非零,所以输出“this is parent pid= 2381”;而在子进程的运行空间中执行如下程序,当读到pid时,os.fork()返回的是0,所以运行if语句块,输出“this is child pid= 0”。

#! /usr/bin/env python3
import os
pid = os.fork()
if (pid==0):
    print("this is child pid= {}".format(pid))
else:
    print("this is parent pid = {}".format(pid))

输出结果:
这里写图片描述
os.fork()是一次调用,两次返回,在父进程的运行空间返回子进程的id号,在子进程空间返回id号为0

二、再看看在Python中的getpid(),getppid()的用法及含义

#! /usr/bin/env python3
import os
pid = os.fork()
getpid = os.getpid()
getppid = os.getppid()
if (pid==0):
    print("this is child pid= {}, getpid= {}, getppid={}".format(pid, getpid, getppid))
else:
    print("this is parent pid = {}, getpid={}".format(pid, getpid))

输出结果:
这里写图片描述

转载自:
http://bbs.pinggu.org/thread-3141607-1-1.html

猜你喜欢

转载自blog.csdn.net/jiulixiang_88/article/details/80649531
今日推荐