孤儿进程:

原因:由于 父进程 比 子进程 先结束退出掉,此时子进程将成为孤儿进程

孤儿进程不会一直存在,孤儿进程最终会被系统进程收养,此时系统进程就会成为孤儿进程的父进程,等孤儿进程结束退出后,系统进程就会自动处理掉。


from time import sleep
import os,sys
def f1():
for i in range(3):
sleep(1)
print("写代码")

def f2():
for i in range(4):
sleep(1)
print('测代码')

pid = os.fork()
if pid < 0:
print('error')
elif pid == 0:
child_pid = os.fork() #在子进程中再创建子进程
print(os.getpid())
if child_pid < 0:
print('error')
elif child_pid == 0:
f2()
print(os.getppid())
else: #子进程直接退出,让孙进程成为孤儿进程
sys.exit()
else:
f1()



最后成为孤儿进程后,孙子进程的父进程编程1,1表示的就是系统进程

 

 

–僵尸进程

原因:子进程先比父进程结束退出,但是父进程没有对进程回收。此时子进程就是僵尸进程。子进程虽然结束了,但是会存在部分信息在内存中,大量的僵尸进程堆积就会占用系统的大量的资源。

解决办法:

1、父进程使用os.wait()阻塞函数将父进程挂起。

缺点:由于使用阻塞函数需要等子进程结束后,才能执行父进程,导致父进程被挂起,效率低下

2、创建二级子进程

【1】 父进程创建子进程,等待回收子进程
【2】 子进程创建二级子进程然后退出
【3】 二级子进程称为孤儿,和原来父进程一同执行事件

3、通过操作系统信号处理sign进程退出

如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD,SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送信号。

原文地址:http://www.cnblogs.com/powfu/p/16901754.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性