僵尸进程

原则:

一个子进程死了,先变成僵尸,等待父进程收尸

父进程必须是子进程的亲爹,爷爷就不行了

如果亲爹死的早:

  1. 自动过继给init当儿子,由init收尸

如果亲爹还活着:

  1. 声明放弃抚养权,由init收尸
    pcntl_signal(SIGCHLD, SIG_IGN);
    一旦声明放弃,就无法获取子进程退出状态码:
    pcntl_waitpid(返回错误码-1)
    proc_open:proc_get_status/proc_close (返回错误码-1)
    但还有后悔药 pcntl_signal(SIGCHLD, SIG_DFL) 恢复接收信号
  2. 一个负责任的好爹,亲自收尸
    pcntl_waitpid 

    1. 阻塞等待所有子进程
      while( $pid_exited = pcntl_waitpid(-1, $status) ) {
      }
    2. 注册信号处理句柄
      pcntl_signal(SIGCHLD, function($signo){
      $pid_exited = pcntl_waitpid(-1, $status);
      });
  3. 一个不负责任的爹,活着却不管不问
    儿子死了就变成了僵尸,想当僵尸还是很难的:)

 

13 评论

  1. Pingback: Buy Cheap NBA 2K17 MT
  2. Pingback: nba 2k17 mt
  3. Pingback: UPAlbion.com
  4. Pingback: u4fifa
  5. Pingback: fifa 17 coins
  6. Pingback: nba2k16store
  7. Pingback: u4fifa twitch
  8. Pingback: u4fifa images
  9. Pingback: buy RS Gold

发表评论