简单分析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中__call__内置函数用法实例
Jun 04 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
Python使用filetype精确判断文件类型
Jul 02 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
python读取文件名并改名字的实例
Jan 07 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
Python argparse模块应用实例解析
Nov 15 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
python 解压、复制、删除 文件的实例代码
Feb 26 Python
Django中的模型类设计及展示示例详解
May 29 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
PyTorch 如何检查模型梯度是否可导
Jun 05 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里array_work用法实例分析
2015/07/13 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
php与js的区别是什么
2013/08/05 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
Vue实现简单分页器
2018/12/29 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
jQuery实时统计输入框字数及限制
2020/06/24 jQuery
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
详解python3百度指数抓取实例
2016/12/12 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
Python 多线程Threading初学教程
2017/08/22 Python
python实现人脸识别代码
2017/11/08 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Django app配置多个数据库代码实例
2019/12/17 Python
parser.add_argument中的action使用
2020/04/20 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
学校安全工作制度
2014/01/19 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
Windows server 2016服务器基本设置
2022/08/14 Servers