简单分析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中使用Beautiful Soup库的超详细教程
Apr 30 Python
pymssql数据库操作MSSQL2005实例分析
May 25 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
Python跨文件全局变量的实现方法示例
Dec 10 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
python定向爬取淘宝商品价格
Feb 27 Python
pytorch cnn 识别手写的字实现自建图片数据
May 20 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
python eventlet绿化和patch原理
Nov 21 Python
PyTorch 中的傅里叶卷积实现示例
Dec 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
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
js实现网页收藏功能
2015/12/17 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
python命令行参数sys.argv使用示例
2014/01/28 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
linux比较文件内容的命令是什么
2015/09/23 面试题
毕业生教师求职信
2013/10/20 职场文书
教师简历自我评价
2014/02/03 职场文书
六查六看剖析材料
2014/02/15 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
市场策划求职信
2014/08/07 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
2014年有孩子的离婚协议书范本
2014/10/08 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
使用Ajax实现无刷新上传文件
2022/04/12 Javascript