简单分析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 相关文章推荐
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
Python绘制并保存指定大小图像的方法
Jan 10 Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
基于Python实现剪切板实时监控方法解析
Sep 11 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
Python3 webservice接口测试代码详解
Jun 23 Python
如何完美的建立一个python项目
Oct 09 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
Numpy ndarray 多维数组对象的使用
Feb 10 Python
python中Matplotlib绘制直线的实例代码
Jul 04 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中date与gmdate的区别及默认时区设置
2014/05/12 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
javascript时间函数大全
2014/06/30 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
javascript获取图片的top N主色值方法详解
2018/01/26 Javascript
javascript变量提升和闭包理解
2018/03/12 Javascript
Vue开发之封装上传文件组件与用法示例
2019/04/25 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python爬虫代理IP池实现方法
2017/01/05 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
浅谈python写入大量文件的问题
2018/11/09 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
介绍一下游标
2012/01/10 面试题
大学自主招生自荐信范文
2014/02/26 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
益达广告词
2014/03/14 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
会计系毕业生求职信
2014/05/28 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
MySQL七大JOIN的具体使用
2022/02/28 MySQL
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫
Go语言grpc和protobuf
2022/04/13 Golang