简单分析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如何实现守护进程的方法示例
Feb 08 Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 Python
Python读取txt某几列绘图的方法
Oct 14 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
python图片二值化提高识别率代码实例
Aug 24 Python
Python简易计算器制作方法代码详解
Oct 31 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
Python AutoCAD 系统设置的实现方法
Apr 01 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Python LMDB库的使用示例
Feb 14 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文件上传简单实现方法
2015/01/24 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
2016/06/13 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
js DOM模型操作
2009/12/28 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
python实现连续图文识别
2018/12/18 Python
python实现维吉尼亚算法
2019/03/20 Python
python文件绝对路径写法介绍(windows)
2019/12/25 Python
Django-migrate报错问题解决方案
2020/04/21 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
档案接收函范文
2014/01/10 职场文书
法律进机关实施方案
2014/03/12 职场文书
《锄禾》教学反思
2014/04/08 职场文书
初中作文评语大全
2014/04/23 职场文书
2014年科技工作总结
2014/11/26 职场文书
付款证明模板
2015/06/19 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
Win11 BitLocker 驱动器加密
2022/04/19 数码科技