理解 pcntl_fork 函数

  • 第一种情况
    for ($n = 1; $n <=3; $n++) {
      $pid = pcntl_fork();
      if($pid==0){
      }elseif ($pid>0){
      }
    }
    sleep(10000);

    根据这进程结构可以看出 当第一次fork后 子进程里面的代码和父进程代码一样,此时pid=12577的子进程里面相当于,注意 父进程12576 也是一样的,但是他们的执行顺序不确定,受cpu调度
    for ($n = 2; $n <=3; $n++) {
      $pid = pcntl_fork();
      if($pid==0){
      }elseif ($pid>0){
      }
    }
    sleep(10000);
    当pid=12576 第二次循环是 产生子进程12578 ,而子进程12577 执行时候又产生子进程12581 因为最后的sleep函数导致每个进程都阻塞,所以出现这样的进程结构
  • 第二种情况
    for ($n = 1; $n <=3; $n++) {
      $pid = pcntl_fork();
      if($pid==0){
      }elseif ($pid>0){
       sleep(10000);
      }
    }

    出现这种进程结构 是因为 父进程睡眠,最外层才执行一次,而子进程执行会继续fork出子进程,而它自己睡眠,这样一直下去就出现这种结构
  • 第三种情况
    for ($n = 1; $n <=3; $n++) {
      $pid = pcntl_fork();
      if($pid==0){
       sleep(10000);
      }elseif ($pid>0){
      }
    }

    这种结构 是因为子进程睡眠 导致子进程无法继续执行,所以父进程里三个循环创建的三个子进程睡眠,然后父进程退出
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!