进程的创建fork

进程和程序

编写完毕的代码,在没有运⾏的时候,称之为程序
正在运⾏着的代码,就成为进程
进程,除了包含代码以外,还有需要运⾏的环境等,所以和程序是有区别的

  1 import os
  2 import time
  3 
  4 ret = os.fork() #注意,fork函数,只在Unix/Linux/Mac上运⾏,windows不可以
  5 if ret == 0:
  6     while True:
  7         print("---1---")
  8         time.sleep(1)
  9 
 10 else:
 11     while True:
 12         print("---2---")
 13         time.sleep(1)

程序执⾏到os.fork()时,操作系统会创建⼀个新的进程(⼦进程),然后复制⽗进程的所有信息到⼦进程中 然后⽗进程和⼦进程都会从fork()函数中得到⼀个返回值,在⼦进程中这 个值⼀定是0,⽽⽗进程中是⼦进程的 id号在Unix/Linux操作系统中,提供了⼀个fork()系统函数,它⾮常特殊。
普通的函数调⽤,调⽤⼀次,返回⼀次,但是fork()调⽤⼀次,返回两次,因 为操作系统⾃动把当前进程(称为⽗进程)复制了⼀份(称为⼦进程),然 后,分别在⽗进程和⼦进程内返回。
⼦进程永远返回0,⽽⽗进程返回⼦进程的ID。
这样做的理由是,⼀个⽗进程可以fork出很多⼦进程,所以,⽗进程要记下 每个⼦进程的ID,⽽⼦进程只需要调⽤getppid()就可以拿到⽗进程的ID。

大于0父进程执行 等于0子进程执行。

可能会同样的代码运行的结果不一样,不一定那个会先执行这个跟当前的cpu占用 内存的占用等等都有关所以调度算法不一样,所以结果就不一样。

getpid,getppid

 17 import os
 18 rpid = os.fork()
 19 if rpid<0:
 20     print("fork调用失败")
 21 
 22 elif rpid == 0:
 23     print("我是⼦进程(%s),我的⽗进程是(%s)"%(os.getpid(),os.getppid()))
 24 
 25 else:
 26     print("我是父进程(%s),我是子进程(%s)"%(os.getpid(),rpid))
 27 

执行结果:
在这里插入图片描述
fork的返回值就是子进程的id。

全局变量在多个进程中不能共享

在这里插入图片描述
执行结果:
在这里插入图片描述

多次fork问题
在这里插入图片描述
执行结果:
在这里插入图片描述
原理:
在这里插入图片描述
fork炸弹:

import os
while True:
	os.fork()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值