12-06 进程其他知识

egon新书来袭请看https://egonlin.com/book.html

进程间数据隔离

进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术

这个技术是为了避免进程A写入进程B的情况发生。 进程的隔离实现,使用了虚拟地址空间。进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A将数据信息写入进程B

进程隔离的安全性通过禁止进程间内存的访问可以方便实现

代码验证

from multiprocessing import Process
n=100 

def work():
    global n  
    n=0
    print('子进程内: ',n)


if __name__ == '__main__':
    p=Process(target=work)
    p.start()
    print('主进程内: ',n)

999

守护进程

会随着主进程的结束而结束,通俗点的说类似于古代的君王和服侍君王的太监,妃子等一干人,只要君王死了其他人都得陪葬一起翘辫子~

888

主进程创建守护进程

  其一:守护进程会在主进程代码执行结束后就终止

  其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children

注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止

import os
import time
from multiprocessing import Process

class Myprocess(Process):
    def __init__(self,person):
        super().__init__()
        self.person = person
    def run(self):
        print(os.getpid(),self.name)
        print('%s正在和女主播聊天' %self.person)


p=Myprocess('炮王')
p.daemon=True  # 一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
p.start()
time.sleep(10)  # 在sleep时查看进程id对应的进程ps -ef|grep id
print('主')

迷惑人的小例子

from multiprocessing import Process

def foo():
    print(123)
    time.sleep(1)
    print("end123")

def bar():
    print(456)
    time.sleep(3)
    print("end456")


p1=Process(target=foo)
p2=Process(target=bar)

p1.daemon=True
p1.start()
p2.start()
time.sleep(0.1)
print("main-------")#打印该行则主进程代码结束,则守护进程p1应该被终止.#可能会有p1任务执行的打印信息123,因为主进程打印main----时,p1也执行了,但是随即被终止.

22

posted @ 2019-10-21 19:57  小猿取经-林海峰老师  阅读(803)  评论(0编辑  收藏  举报