简单分析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迭代器的使用方法实例
Nov 21 Python
Python操作SQLite简明教程
Jul 10 Python
python使用pil生成缩略图的方法
Mar 26 Python
pygame播放音乐的方法
May 19 Python
使用Python求解最大公约数的实现方法
Aug 20 Python
Python Flask基础教程示例代码
Feb 07 Python
numpy返回array中元素的index方法
Jun 27 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 Python
python 实用工具状态机transitions
Nov 21 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
如何用python爬取微博热搜数据并保存
Feb 20 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 11 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
将数组写入txt文件 var_export
2009/04/21 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
php中的ini配置原理详解
2014/10/14 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
python 读取二进制 显示图片案例
2020/04/24 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
审核会计岗位职责
2013/11/08 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
党员公开承诺书2015
2015/01/21 职场文书
邀请函格式范文
2015/02/02 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
table不让td文字溢出操作方法
2022/12/24 HTML / CSS