对python中的os.getpid()和os.fork()函数详解

如下所示:

import os
import sys
import time

processNmae = 'parent'

print "Program executing ntpid:%d,processNmae:%s"%(os.gitpid(),processNmae)

#attempt to fork child process
try:
  forkPid = os.fork()
except OSError:
  sys.exit("Unable to create new process.")

# Am I parent process?
if forkPid != 0:
  print "Parent executingn"+"tpid:%d,forkPid:%d,processNmae:%s"%(os.getpid(), forkPID,processName)

# Am I child process?
elif forkPID == 0:
    processName = "child"
    print "Child executingn" + "tpid: %d, forkPID: %d, processName: %s" % (os.getpid(), forkPID,processName)<br>
print "Process finishingntpid: %d, processName: %s" % (os.getpid(), processName)

程序每次执行时,操作系统就会创建一个新的进程来运行程序指令。进程还可以调用os.fork,要求操作系统新建一个进程。

“父进程”是调用os.fork的进程。父进程所创建的任何进程都是子进程。

每个进程都有一个不重复的“进程ID号”,或称“pid”,它对进程进程进行标识。

进程调用fork函数时,操作系统会新建一个子进程,它本质上与父进程完全相同。子

进程从父进程继承了多个值的拷贝,比如全局变量和环境变量。两个进程唯一的区别就是fork的返回值。

child(子)进程接收返回值为0,而父进程接收子进程的pid作为返回值。调用fork函数后,两个进程并发执行同一个程序,

首先执行的是调用了fork之后的下一行代码。父进程和子进程既并发执行,又相互独立;也就是说,它们是“异步执行”的。

import os
pid=os.fork() #fork反复拷贝
if pid==0:
  print("A",os.getpid(),os.getppid())
else:
  print("B",os.getpid(),os.getppid()) 

# os.getpid()获取当前进程id   os.getppid()获取父进程id 

以上这篇对python中的os.getpid()和os.fork()函数详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2019-08-08

Python中的进程分支fork和exec详解

在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支. 1.fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独立父进程外运行. 2.fork()是一个很特殊的方法,一次调用,两次返回. 3.fork()它会返回2个值,一个值为0,表示在子进程返回;另外一个值为非0,表示在父进程中返回子进程ID. 以下只能在linux中运行,不能在window下运行. 进程分支fork() 实例如下: 复制代码 代码如下:

Python多进程fork()函数详解

进程 进程是程序的一次动态执行过程,它对应了从代码加载.执行到执行完毕的一个完整过程.进程是系统进行资源分配和调度的一个独立单位.进程是由代码(堆栈段).数据(数据段).内核状态和一组寄存器组成. 在多任务操作系统中,通过运行多个进程来并发地执行多个任务.由于每个线程都是一个能独立执行自身指令的不同控制流,因此一个包含多个线程的进程也能够实现进程内多任务的并发执行. 进程是一个内核级的实体,进程结构的所有成分都在内核空间中,一个用户程序不能直接访问这些数据. 进程的状态: 创建.准备.运行.阻塞

python使用fork实现守护进程的方法

os模块中的fork方法可以创建一个子进程.相当于克隆了父进程 os.fork() 子进程运行时,os.fork方法会返回0: 而父进程运行时,os.fork方法会返回子进程的PID号. 所以可以使用PID来区分两个进程: #!/usr/bin/env python #coding=utf8 from time import sleep import os try: pid = os.fork() except OSError, e: pass sleep(30) 运行代码,查看进程: [roo

简单分析Python中用fork()函数生成的子进程

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():

小结Python用fork来创建子进程注意事项

自己随手写了Python下 fork 进程的测试代码(来说明这个问题不一定完全合适): def fork(a): def now(): import datetime return datetime.datetime.now().strftime("%S.%f") import os import time print now(), a if os.fork() == 0: print '子进程[%s]:%s' % (now(), os.getpid()) while 1: a-=10

简单分析python的类变量、实例变量

1.类变量.实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量.通常不使用self.变量名赋值的变量.类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的. 实例变量: 实例变量是定义在方法中的变量,使用self绑定到实例上的变量,只是对当前实例起作用. 2.访问 类变量 在类的内部和外部类变量都可以直接使用className.类变量的形式访问.但是在类的内部,也可以使用self.类变量来访问,但是这个是用含义就不同了(后面使用代码验证). 实例变量 在类的内部

Python数据可视化正态分布简单分析及实现代码

Python说来简单也简单,但是也不简单,尤其是再跟高数结合起来的时候... 正态分布(Normaldistribution),也称"常态分布",又名高斯分布(Gaussiandistribution),最早由A.棣莫弗在求二项分布的渐近公式中得到.C.F.高斯在研究测量误差时从另一个角度导出了它.P.S.拉普拉斯和高斯研究了它的性质.是一个在数学.物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力. 正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人

对python中的xlsxwriter库简单分析

一.xlsxwriter 基本用法,创建 xlsx 文件并添加数据 官方文档:http://xlsxwriter.readthedocs.org/ xlsxwriter 可以操作 xls 格式文件 注意:xlsxwriter 只能创建新文件,不可以修改原有文件.如果创建新文件时与原有文件同名,则会覆盖原有文件 Linux 下安装: sudo pip install XlsxWriter Windows 下安装: pip install XlsxWriter # coding=utf-8 from

python装饰器三种装饰模式的简单分析

学设计模式中有个装饰模式,用java实现起来不是很难,但是远远没有python简单,难怪越来越火了! 这里就简单讨论下python的几种装饰模式: 一 无参装饰器: # 装饰器 import time # 装饰器,记录函数运行时间 def decorator01(fun): def wapper(): stime = time.time() fun() etime = time.time() print("fun run time is {TIME}".format(TIME=etim

简单讲解Python中的闭包

闭包并不是什么新奇的概念,它早在高级语言开始发展的年代就产生了.闭包(Closure)是词法闭包(Lexical Closure)的简称.对闭包的具体定义有很多种说法,这些说法大体可以分为两类: 一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在其词法上下文中引用了自由变量的函数. 另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体.比如参考资源中就有这样的的定义:在实现深约束时,需要创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来

linux下system函数的简单分析

简单分析了linux下system函数的相关内容,具体内容如下 int __libc_system (const char *line) { if (line == NULL) /* Check that we have a command processor available. It might not be available after a chroot(), for example. */ return do_system ("exit 0") == 0; return do

Linux中使用C语言的fork()函数创建子进程的实例教程

一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己.   我们来看一个例子: #include <unistd.h> #include &