Python网络编程2

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)
  • 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、二级子进程
      让一级子进程先退出,二级变为了孤儿进程被收养,父进程处理一级子进程的退出(避免一级子进程为僵尸)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值