PHP多进程执行顺序问题

最近想研究一下PHP多进程编程的内容。就比较好奇pcntl_fork 后,总是会先执行父进程代码么?我写demo测试的时候,发现总是先执行父进程代码。但是不敢100%断定。想请有经验的大佬指点一下~

$pid = pcntl_fork(); //fork出子进程
if ($pid == -1) {
    die('进程fork失败');
} else if ($pid) { // $pid > 0, 如果fork成功,返回子进程id
     // 父进程逻辑
     //pcntl_wait($status); // 父进程必须等待一个子进程退出后,再创建下一个子进程。
    echo "我是父进程" . PHP_EOL;
} else { // $pid = 0
        // 子进程逻辑
    echo "我是子进程".PHP_EOL;
}
最佳答案

可以在 CLI 下 多尝试几次,没有固定顺序

3周前 评论
Tacks (作者) 3周前
bneglect (楼主) 3周前
讨论数量: 9

没有顺序

3周前 评论
bneglect (楼主) 3周前

可以在 CLI 下 多尝试几次,没有固定顺序

3周前 评论
Tacks (作者) 3周前
bneglect (楼主) 3周前

一般来说父进程的 cpu调度优先级比较高 使用top 命令观察下 pr nice值

3周前 评论
bneglect (楼主) 3周前

是会先执行父进程代码,通常情况下,在使用 pcntl_fork() 函数创建子进程之后,父进程中的代码将会先执行。这是因为在调用 pcntl_fork() 时,父进程会把当前的执行状态(包括变量的值和代码的执行位置)复制一份给子进程,然后父进程和子进程就同时开始执行代码。如果你想要在创建子进程后不执行父进程中的代码,可以在 pcntl_fork() 函数之后添加一个条件判断,只有在父进程中才执行后续的代码。例如:

$pid = pcntl_fork();

if ($pid == -1) {
    // 创建子进程失败
    exit("Could not fork");
} else if ($pid) {
    // 这里是父进程中的代码
    // 执行一些操作
} else {
    // 这里是子进程中的代码
    // 执行一些操作
}
1天前 评论
bneglect (楼主) 1天前

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