python中如果要创建新进程的话,可以使用os模块中的fork方法。为了了解其中工作原理,笔者结合linux的查看进程ps命令,对这个方法做了一些测试。

python运行时进程

python一开始运行的时候,系统会生成一个新的进程。先看下面代码:

#!/usr/bin/env python

#coding=utf8

from time import sleep

sleep(30)

因为代码执行完后,进程就会被销毁,所以这里睡眠30秒,方便看到效果。在linux下执行这个代码:

python hello.py &

加上&符号,可以让程序在后台运行,不会占用终端。输入ps -l命令查看进程,在电脑上输出如下:

python运行时进程

其中第二条记录就是刚才运行的python了。

使用fork来创建一个新进程

使用fork创建一个新进程成功后,新进程会是原进程的子进程,原进程称为父进程。如果发生错误,则会抛出OSError异常。

#!/usr/bin/env python

#coding=utf8

from time import sleep

import os

try:

pid = os.fork()

except OSError, e:

pass

sleep(30)

运行代码,查看进程,在电脑上输出如下:

python中fork进程

可以看出第二条python进程就是第一条的子进程。

fork进程后的程序流程

使用fork创建子进程后,子进程会复制父进程的数据信息,而后程序就分两个进程继续运行后面的程序,这也是fork(分叉)名字的含义了。在子进程内,这个方法会返回0;在父进程内,这个方法会返回子进程的编号PID。可以使用PID来区分两个进程:

#!/usr/bin/env python

#coding=utf8

import os

#创建子进程之前声明的变量

source = 10

try:

pid = os.fork()

if pid == 0: #子进程

print "this is child process."

#在子进程中source自减1

source = source - 1

sleep(3)

else: #父进程

print "this is parent process."

print source

except OSError, e:

pass

上面代码中,在子进程创建前,声明了一个变量source,然后在子进程中自减1,最后打印出source的值,显然父进程打印出来的值应该为10,子进程打印出来的值应该为9。为了明显区分父进程和子进程,让子进程睡3秒,就看的比较明显了。

既然子进程是父进程创建的,那么父进程退出之后,子进程会怎么样呢?此时,子进程会被PID为1的进程接管,就是init进程了。这样子进程就不会受终端退出影响了,使用这个特性就可以创建在后台执行的程序,俗称守护进程(daemon)。

python程序启动其他python程序_python中使用fork创建新的进程相关推荐

  1. python中使用fork创建新的进程

    fork知识入门 python的os module中有fork()函数用于生成子进程,生成的子进程是父进程的镜像,但是它们有各自的地址空间,子进程复制一份父进程内存给自己,两个进程之间的执行是相互独立 ...

  2. python中fork创建新的进程

    为了了解其中工作原理, 在结合linux的查看进程ps命令,对进程做了进一步的理解: 1.在linux下运行.py文件,系统就会创建一个进程 # coding=utf-8 from time impo ...

  3. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  4. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  5. “安装程序无法定位现有系统分区,也无法创建新的系统分区”提示

    我在使用win pe模式安装win7 (32 位)的时候出现"安装程序无法定位现有系统分区,也无法创建新的系统分区"提示. 解决步骤: 第一步:把win7镜像发在你电脑的非系统盘的 ...

  6. python代码风格程序越复杂越高级_Python中代码风格的改变和相应的性能优化

    使用现代风格改善你的代码 一旦你开始使用 Python 3,你就有机会接触新的特性来改善你的代码.这篇文章中提到的很多东西实际上在 Python 3 之前就已经被支持了.但我还是要提一下它们,因为知道 ...

  7. python语言只有一种运行方式_Python中四种运行其他程序的方式

    在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...

  8. python中使用保留字引用当前程序以外的功能库_Python中使用_______保留字引用当前程序以外的功能库...

    [单选题]以下哪个选项不是Python语言的保留字 [简答题]用3分钟的时间尽可能多的写出你能命名的情绪 [填空题]已知列表对象 x = ['11', '2', '3'] ,则表达式 max(x) 的 ...

  9. Python如何启动windows本地程序

    要在Windows上使用Python启动本地程序,您可以使用subprocess模块.具体而言,您可以使用subprocess.call()或subprocess.Popen()函数来启动一个本地程序 ...

最新文章

  1. 亮度翻转_ROG幻13翻转本发布;联想IdeaPad 5G轻薄本即将上线
  2. 半导体行业必将再火十年!两大趋势成发展新动能
  3. 用txt做数据源和winfrom textbox输入智能提示
  4. Apache端口设置多域名和转发请求(虚拟域名)
  5. [html] html5中的meta标签renderer有什么作用?
  6. Python06 向前Euler法、向后Euler法、梯形方法、改进的Euler方法以及四阶Runge_Kutta方法(附代码)
  7. nasa电池数据集_文章分享—模型与滤波算法结合的锂电池剩余寿命预测方法
  8. 完成一个分析H264码流的工具
  9. 使用函数统计指定数字的个数_四种函数方法实现按条件统计一个区间数字的个数...
  10. SNMP协议-SNMP TRAP
  11. 【原版教材•中英对照】密度泛函理论的化学家指南(第二版)— 传统量子力学的化学家们将从这篇得到特别的启发
  12. 2020,2022年全年详细工作日、周末、节假日数据表sql
  13. IP的子网和超网划分
  14. 数字电路中的时钟(2) PPM 计算
  15. PHP学习笔记(二)——行云博客
  16. 奥沙利文独家授权数字藏品正式发售 线上线下搭配多款专属福利
  17. 卷积与反卷积(转置卷积)关系的公式推导 及其各自的形式
  18. 报错:libpng warning: iCCP: cHRM chunk does not match sRGB解决办法
  19. 火车头过滤 css样式_HTML5和CSS3过滤器中的网络摄像头视频捕获
  20. Qt中sender()函数的用法

热门文章

  1. 大数据在企业中的运用
  2. 大数据平台数据挖掘的作用是什么
  3. 数学建模学习交流论文写作课件
  4. Windows中使用包管理器(类似于apt/yum的) - Chocolatey
  5. java阶段培训内容报告_周报告及Java学习笔记
  6. oracle 单表查重,Oracle如何用单字段或多字段进行查重
  7. mysql 触发器 lod_MySQL--初探触发器的使用和理解
  8. Hive压缩存储(以Parquet为例)
  9. [Flink]Flink 的物理分区器
  10. delphi判断线程是否正在运行