简单分析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 3.x 新特性及10大变化
Jun 12 Python
Python 多线程实例详解
Mar 25 Python
python中的随机函数小结
Jan 27 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
python实现微信定时每天和女友发送消息
Apr 29 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 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
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
Javascript 对象的解释
2008/11/24 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
python中的for循环
2018/09/28 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
安装PyInstaller失败问题解决
2019/12/14 Python
Python pymsql模块的使用
2020/09/07 Python
幼儿园教学管理制度
2014/02/04 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
会计核算科岗位职责
2014/03/19 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
禁烟标语大全
2014/06/11 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
实习护士自荐信
2015/03/25 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
刑事辩护词范文
2015/05/21 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers