僵尸进程处理(二)
1、os.waitpid(aid,option)
功能:处理子进程的退出
参数:
pid : -1 表示等待任意的子进程退出
>0 表示等待相应pid号的子进程
option 0 表示阻塞等待
WNOHANG 表示非阻塞等待
返回值:
同 wait
os.waitpid(-1,0) = 等同于 = os.wait()
示例:
import os
import sys
import time
pid = os.fork()
if pid < 0:
print('Create proces failed')
elif pid == 0:
print('Child process...')
time.sleep(2)
sys.exit(2)
else:
# 设置为非阻塞状态,循环处理查看子进程的状态
while True:
p, status = os.waitpid(-1, os.WNOHANG)
print('parent process')
print(p, status)
while True:
pass
2、创建二级子进程
1、父进程创建子进程后等待子进程退出2、子进程创建二级子进程后马上退出,二级子进程成为孤儿
3、让父进程和二级子进程处理具体事件
示例:
# 创建二级子进程
import os
# 创建一级子进程
pid1 = os.fork()
if pid1 < 0:
print('创建一级子进程失败')
elif pid1 == 0:
# 创建二级子进程
pid2 = os.fork()
if pid2 < 0:
print('创建二级子进程失败')
elif pid2 == 0:
print('做另一件任务')
else:
# 一级子进程退出,使二级子进程成为孤儿
os._exit(0)
else:
# 等待一级子进程退出
os.wait()
print('做父进程该做的事')
3、聊天室
'''
1、选择使用什么样的套接字
udp 转发 客户端 ---->服务器 ---->其他客户端
用print简单打印命令操作提示
存储用户:列表或字典
使用函数或者类来包装功能
每完成一个功能检测一个功能
存储用户: 2、功能:
1、类似于qq群聊,用户在加入聊天室的时候有一个简单的登录
输入用户名即可
实现:客户端输入用户名,发送给服务器,服务器存储
2、 需要个数据结构保存用户(列表,字典均可)
实现:收到发过来的用户名放到列表或字典中
3、当一个人发送消息的时候,其他人可以接收消息
格式: 张三:xxxxx
实现:客户将消息发送给服务器,服务器遍历列表进行转发
4、当一个人登录退出时给其他人提示
xxx 登录了
xxx 退出了
实现: 给服务器发送登录退出消息,服务器转发
理员发送消息 全部在线人员均可收到
实现:服务的可控制消息发送给所有人
'''