python的os module中有fork()函数用于生成子进程,生成的子进程是父进程的镜像,但是它们有各自的地址空间,子进程复制一份父进程内存给自己,两个进程之 间的执行是相互独立的,其执行顺序可以是不确定的、随机的、不可预测的,这点与多线程的执行顺序相似。
# @param python中fork()函数生成子进程分析# @author 内存溢出 jb51.cc|jb51.cc import osdef child(): print 'A new child:',os.getpID() print 'Parent ID is:',os.getppID() os._exit(0)def parent(): while True: newpID=os.fork() print newpID if newpID==0: child() else: pIDs=(os.getpID(),newpID) print "parent:%d,child:%d"%pIDs print "parent parent:",os.getppID() if raw_input()=='q': breakparent()# End www.jb51.cc
在我们加载了os模块之后,我们parent函数中fork()函数生成了一个子进程,返回值newpID有两个,一个为0,用以表示子进程,一个是大于 0的整数,用以表示父进程,这个常数正是子进程的pID. 通过print语句我们可以清晰看到两个返回值。如果fork()返回值是一个负值,则表明子进程生成不成功(这个简单程序中没有考虑这种情况)。如果 newpID==0,则表明我们进入到了子进程,也就是child()函数中,在子进程中我们输出了自己的ID和父进程的ID。如果进入了else语句, 则表明newpID>0,我们进入到父进程中,在父进程中os.getpID()得到自己的ID,fork()返回值newpID表示了子进程的ID,同时我们输出了父进程的父进程的ID. 通过实验我们可以看到if和else语句的执行顺序是不确定的,子、父进程的执行顺序由 *** 作系统的调度算法来决定。
总结以上是内存溢出为你收集整理的python fork()函数生成子进程的完整代码全部内容,希望文章能够帮你解决python fork()函数生成子进程的完整代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)