pcntl_rfork函数的应用场景是怎样的?

关注到pcntl_rfork函数,手册看的稀里糊涂:sweat_smile:,模糊理解应该是控制fork出来的子进程“继承”父进程上文环境的,请教了解这块的大神指点一下,应用场景是什么样子的?
讨论数量: 2

问题:pcntl_fork函数的应用场景是怎样的?

应该是 pcntl_fork() 函数吧,看问题里面还多了一个 r

回答

应用场景

  • 可创建守护进程 (可以两次调用 pcntl_fork ,让子进程成为 session leader )
  • 可创建多进程
  • ...

性质:父子进程间遵循读时共享写时复制 Cow(CoypOnWrite)

  • 关于 ( fork 出来的子进程 “继承” 父进程上文环境的) 这里给出一个场景
$number = 1;

$ppid = posix_getpid();
$pid  = pcntl_fork();

if ($pid < 0) {
    die('could not fork');
} else if ($pid > 0) {
    // 写时复制 number 的副本
    $number += 1;
    echo "father process. father's ppid={$ppid} children's pid={$pid} | number={$number}" . PHP_EOL;
} else {
    // 写时复制 number 的副本
    $number += 2;
    echo "children process. | number={$number}" . PHP_EOL;
}
1年前 评论
artisansir (楼主) 1年前

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