简单分析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实现DNS正向查询、反向查询的例子
Apr 25 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
python实现扫描日志关键字的示例
Apr 28 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
django项目简单调取百度翻译接口的方法
Aug 06 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
Dec 04 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 Python
Django多数据库联用实现方法解析
Nov 12 Python
Django 实现图片上传和下载功能
Dec 31 Python
Python学习之迭代器详解
Apr 01 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下封装较好的数字分页方法
2010/11/23 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
jQuery实现列表的全选功能
2015/03/18 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
js无法获取到html标签的属性的解决方法
2016/07/26 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
Python实现FM算法解析
2019/06/18 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
教师网络培训感言
2014/03/09 职场文书
爱情寄语大全
2014/04/09 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
运动会100米广播稿
2015/08/19 职场文书
java executor包参数处理功能 
2022/02/15 Java/Android