1、进程状态(ps -aux的STAT列)
- S :可中断阻塞(阻塞函数)
- D :不可中断阻塞(系统进程)
- T :暂停
- R :运行
- Z :僵尸
- < :较高优先级
- N :较低优先级
- + :前台进程(在终端运行,能够被终端控制的进程)
python3 01_time.py
ps -aux | grep “01_time” ## S+ - s :会话组组长(进程也分组,同1个终端下的所有进程都在1个组)
2、进程的运行特征
- 1、可使用计算机多核资源
- 2、计算机分配资源的最小单位(CPU、内存)
- 3、每个进程空间独立,有自己的资源
- 4、进程之间的运行互不干扰,相互独立
3、利用os模块创建进程
- 1、方法名 :pid = os.fork()
功能 :创建新的进程
返回值- 1、创建进程失败 :负数
- 2、创建进程成功
- 1、原进程中返回新进程的PID号
- 2、新进程中返回0
- 2、注意
用fork()执行结果可能不一致,因为虽然是父子进程,但不存在谦让关系,谁先抢到CPU时间片谁先执行
4、关于fork()
- 1、思考
- 1、在01_os.fork()示例.py的最上面添加:
print("***************") - 2、在01_os.fork()示例.py上面添加变量:
name = “张三丰”
if pid == 0:
print(“姓名:”,name)
- 1、在01_os.fork()示例.py的最上面添加:
- 2、子进程从fork下一句开始执行
- 3、父子进程各自独立运行,运行顺序不一定
- 4、if结构和fork()固定搭配,通过返回值不同,让父子进程分别做自己的事情
- 5、子进程会复制父进程全部代码和空间,包括fork()之前的资源
- 6、父子进程空间互不影响,各自修改各自空间内容
5、进程函数(os)
- 1、os.getpid() :获取当前进程的PID号
- 2、os.getppid():获取父进程的PID号
- 3、os._exit(status)
功能 :退出当前进程
参数 :status退出状态(0正常退出,1异常退出)
示例 :os._exit(0) - 4、sys.exit(status)
功能 :退出当前进程
参数 :默认为0,可传字符串,进程退出时会打印字符串
示例 :sys.exit(“我结束了!!!”)
6、孤儿进程
父进程先于子进程退出,此时子进程就是孤儿进程(被系统进程收养)
7、僵尸进程
- 1、子进程先结束,且父进程没有处理子进程退出行为,此时子进程为僵尸进程
- 2、大量僵尸进程后果:虽然结束,但是会存留部分进程信息在内存中,耗费系统资源
- 3、避免僵尸进程的方法
- 1、让父进程处理子进程(os.wait())
pid,status = os.wait()
功能 :父进程中阻塞,等待子进程退出并处理
返回值 :pid 子进程PID号
status 退出状态(0正常,1异常退出) - 2、二级子进程
让一级子进程先退出,二级变为了孤儿进程被收养,父进程处理一级子进程的退出(避免一级子进程为僵尸)
- 1、让父进程处理子进程(os.wait())