进程
进程:
进程是正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。
开启进程的方式:
第一种
from multiprocessing import Process
def task(name):
pass
if __name__ == '__main__':
p=Process(target=task,args=('egon',))
p.start()
第二种:
class MyProcess(Process):
def __init__(self,name):
super(MyProcess,self).__init__()
self.name=name
def run(self):
pass
if __name__ == '__main__':
p=MyProcess('egon')
p.start()
关于创建的子进程,UNIX和windows
1. 在UNIX中该系统调用是:fork,fork会创建一个与父进程一模一样的副本,二者有相同的存储映像、同样的环境字符串和同样的打开文件
(在shell解释器进程中,执行一个命令就会创建一个子进程)
2. 在windows中该系统调用是:CreateProcess,CreateProcess既处理进程的创建,也负责把正确的程序装入新进程。
对比unix和windows
1.相同的是:进程创建后,父进程和子进程有各自不同的地址空间(多道技术要求物理层面实现进程之间内存的隔离),任何一个进程的在其地址空间中的修改都不会影响到另外一个进程。
2.不同的是:在UNIX中,子进程的初始地址空间是父进程的一个副本,提示:子进程和父进程是可以有只读的共享内存区的。
但是对于windows系统来说,从一开始父进程与子进程的地址空间就是不同的。
进程之间空间隔离:
进程之间空间互相隔离,在子程序的内存空间不影响父级程序
对于unix中的僵尸进程与孤儿进程:
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符
仍然保存在系统中。这种进程称之为僵死进程。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。
孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。