简单分析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 自动提交和抓取网页
Jul 13 Python
跟老齐学Python之深入变量和引用对象
Sep 24 Python
Python中几个比较常见的名词解释
Jul 04 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
Jul 01 Python
Python中交换两个元素的实现方法
Jun 29 Python
python xpath获取页面注释的方法
Jan 14 Python
详解Python locals()的陷阱
Mar 26 Python
Python实现带下标索引的遍历操作示例
May 30 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
Python中三种花式打印的示例详解
Mar 19 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
Python GAE、Django导出Excel的方法
2008/11/24 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
深入理解Django中内置的用户认证
2017/10/06 Python
python实现求最长回文子串长度
2018/01/22 Python
python递归全排列实现方法
2018/08/18 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
Python-split()函数实例用法讲解
2020/12/18 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
一道Delphi上机题
2012/06/04 面试题
生物科学专业个人求职信范文
2013/12/07 职场文书
七年级历史教学反思
2014/02/05 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
本科生就业推荐信
2014/05/19 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python