你懵逼的fork多进程编程

基于应用层fork的多进程编程

## ***代码演示:***
import os
pid=os.fork()
if pid<0:   	 
   print("创建进程失败")
elif pid==0:    
   print("这是新的进程")
else:    
   print("这是老进程")
   
print("进程结束!!")

####### 解释1.:
上述代码正常理解会打印符合条件的一条语句。但是,这样理解是错误的。

正常打印:
这是老进程
进程结束!!
这是新的进程
进程结束!!

####### 解释2.:
子进程会复制父进程全部内存空间,从fork下一句开始执行。父子进程各自独立运行,运行顺序不一定。

父进程子进程
import osimport os
pid=os.fork() ##执行完这句,创建子进程pid=os.fork()##子进程不执行这一句
if pid<0:if pid<0:
print(“创建进程失败”)print(“创建进程失败”)
elif pid==0:elif pid==0:
print(“这是新的进程”)print(“这是新的进程”)
else:else:
print(“这是老进程”)print(“这是老进程”)
print(“进程结束!!”)print(“进程结束!!”)
所以才会打印成上述的语句!!!

解释这一句话:

 进程之间的运行互不影响,各自独立
 每个进程拥有独立的空间,各自使用自己空间资源
from time import sleep
import os
a=1#定义全局变量
pid=os.fork()
if pid<0:
	print("Error")
elif pid==0:
	print("这是子进程")
	print("a=",a)
	a=1000	
else:
	sleep(2)
	print("这是父进程")
	print("a=",a)
打印结果:
	这是子进程
	a= 1
	这是父进程
	a: 1
解释:

因为全局变量a=1,子进程复制了父进程中的所有代码,所有会打印:

这是子进程
a= 1

虽然在子进程中修改了a的值,打印父进程中的内容时,还是打印:

这是父进程
 a: 1
解释就是这句话:
	每个进程拥有独立的空间,各自使用自己空间资源

补:

进程相关函数

os.getpid()
功能: 获取一个进程的PID值返回值:
      返回当前进程的PID
os.getppid()	
功能: 获取父进程的PID号返回值: 
       返回父进程PID
孤儿和僵尸的故事 敬请期待!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值