简单分析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小技巧之批量抓取美女图片
Jun 06 Python
跟老齐学Python之print详解
Sep 28 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 Python
简述Python中的进程、线程、协程
Mar 18 Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
Python中return self的用法详解
Jul 27 Python
详解在python操作数据库中游标的使用方法
Nov 12 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
python RSA加密的示例
Dec 09 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 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编实现程动态图像的创建代码
2008/09/28 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP编程函数安全篇
2013/01/08 PHP
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
php中的boolean(布尔)类型详解
2013/10/28 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
删除重复数据的算法
2006/11/23 Javascript
cument.execCommand()用法深入理解
2012/12/04 Javascript
js倒计时小程序
2013/11/05 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
中学教师培训制度
2014/01/31 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
JavaScript文档对象模型DOM
2021/11/20 Javascript