Manager进程

swoole中worker/task进程都是由Manager进程Fork并管理的。

  • 子进程结束运行时,manager进程负责回收此子进程,避免成为僵尸进程。并创建新的子进程
  • 服务器关闭时,manager进程将发送信号给所有子进程,通知子进程关闭服务
  • 服务器reload时,manager进程会逐个关闭/重启子进程

为什么不是Master进程呢,主要原因是Master进程是多线程的,不能安全的执行fork操作。



  • selbstkennen梁晨

    存在一种异常场景,强制杀掉master之后,manager和worker还在的情况,具体原因不太清楚。

  • swoole课程

    222

  • Strengthen

    应该是因为,worker任然在工作,而不是处于闲置状态,manager在等待worker结束,所以也不会被回收,所以光kill掉master是无法回收manager和worker(task),需要保证worker工作完成

  • 图图亚雷

    强制杀掉master之后,manager和worker还在的情况确实存在。。。

  • Jacob Law

    强制杀掉master的话,worker等进程还在,是因为杀的方法没用对, 如果确实要强制杀master进程的话,应该用

    kill -KILL -master进程id
    

    也就是在master进程id前面加一个负号。 但是正确结束swoole进程的方法应该是

    kill -15 master进程id
    

    也就是发送的应该是15信号,而不是9(KILL)信号。