简单分析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使用cookie库操保存cookie详解
Mar 03 Python
python读取浮点数和读取文本文件示例
May 06 Python
Python动态加载模块的3种方法
Nov 22 Python
在python中以相同顺序shuffle两个list的方法
Dec 13 Python
解决Python中回文数和质数的问题
Nov 24 Python
Python面向对象封装操作案例详解
Dec 31 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
python 生成任意形状的凸包图代码
Apr 16 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
总结Python使用过程中的bug
Jun 18 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安全性漫谈
2012/06/28 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
php车辆违章查询数据示例
2016/10/14 PHP
jQuery 渐变下拉菜单
2009/12/15 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
中专毕业生自荐信
2013/11/16 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js