简单分析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获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
教你学会使用Python正则表达式
Sep 07 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
python内置数据类型之列表操作
Nov 12 Python
Python列表list排列组合操作示例
Dec 18 Python
python如何制作英文字典
Jun 25 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
Python input函数使用实例解析
Nov 22 Python
Pandas缺失值2种处理方式代码实例
Jun 13 Python
Python time库的时间时钟处理
May 02 Python
python基于turtle绘制几何图形
Jun 15 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 实用代码收集
2010/01/22 PHP
PHP无敌近乎加密方式!
2010/07/17 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
js中获取事件对象的方法小结
2011/03/13 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
Python Trie树实现字典排序
2014/03/28 Python
python绘图库Matplotlib的安装
2014/07/03 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
2020/04/12 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
求职者简历中的自我评价
2013/10/20 职场文书
yy结婚证婚词
2014/01/10 职场文书
司机辞职报告范文
2014/01/20 职场文书
五四青年节演讲稿
2014/05/26 职场文书
小学班级口号
2014/06/09 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
公司的力量观后感
2015/06/05 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
oracle重置序列从0开始递增1
2022/02/28 Oracle
如何利用python实现列表嵌套字典取值
2022/06/10 Python