简单分析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使用xlrd模块读写Excel文件的方法
May 06 Python
Python 的描述符 descriptor详解
Feb 27 Python
深入浅析ImageMagick命令执行漏洞
Oct 11 Python
Python DataFrame.groupby()聚合函数,分组级运算
Sep 18 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
Python基于Faker假数据构造库
Nov 30 Python
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 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
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
js 设置选中行的样式的实现代码
2010/05/24 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
ES6中Math对象新增的方法实例详解
2017/04/25 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
Python编程入门的一些基本知识
2015/05/13 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python isinstance函数用法详解
2020/02/13 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
时尚圣经:The Fashion Bible
2019/03/03 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
大学生最常用的自我评价
2013/12/07 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
个性婚礼策划方案
2014/05/17 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
CSS3实现指纹特效代码
2022/03/17 HTML / CSS
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers