简单分析Python中用fork()函数生成的子进程


Posted in Python onMay 04, 2015

python的os module中有fork()函数用于生成子进程,生成的子进程是父进程的镜像,但是它们有各自的地址空间,子进程复制一份父进程内存给自己,两个进程之 间的执行是相互独立的,其执行顺序可以是不确定的、随机的、不可预测的,这点与多线程的执行顺序相似。 

import os
def 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':
      break
parent()

    在我们加载了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 相关文章推荐
python类继承与子类实例初始化用法分析
Apr 17 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
python对日志进行处理的实例代码
Oct 06 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
python 返回列表中某个值的索引方法
Nov 07 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
ubuntu上安装python的实例方法
Sep 30 Python
Python类反射机制使用实例解析
Dec 30 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
python上下文管理器异常问题解决方法
Feb 07 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
python实现从字典中删除元素的方法
May 04 #Python
Python中利用原始套接字进行网络编程的示例
May 04 #Python
python通过索引遍历列表的方法
May 04 #Python
python实现将元祖转换成数组的方法
May 04 #Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 #Python
python通过定义一个类实例作为ftp回调方法
May 04 #Python
Python中__new__与__init__方法的区别详解
May 04 #Python
You might like
PHP 验证码的实现代码
2011/07/17 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
python根据出生年份简单计算生肖的方法
2015/03/27 Python
在Python的循环体中使用else语句的方法
2015/03/30 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
程序员岗位职责
2013/11/11 职场文书
丑小鸭教学反思
2014/02/03 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
校园安全广播稿
2014/02/08 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
单位租房协议书范本
2014/12/04 职场文书
财务管理制度范本
2015/08/04 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS