关于pcntl_fork()函数是php-pcntl模块中用于创建进程的函数。本篇文章将会带领你们一同走进充满奥秘的PHP中,一起出发吧!!!
pcntl_fork()函数是php-pcntl模块中用于创建进程的函数。(不支持windows)
至于php_pcntl扩展如何安装开启这里就不介绍了,只分析pcntl_fork()这个函数本身。
$one = 123;$one++;$two = time();$pid = [];$pid = pcntl_fork();$three = time();
当:pcntl_fork()函数执行的时候,会创建一个子进程。子进程会复制当前进程,也就是父进程的所有:数据,代码,还有状态。
1.当pcntl_fork()创建子进程成功后,在父进程内,返回子进程号,在子进程内返回0,失败则返回-1
2.子进程会复制父进程的代码,数据。那么就说明:子,父进程拥有的代码和数据会一模一样。
3.重点:子进程会复制父进程的状态,那么就有上面的示例代码:在第五行执行了pcntl_fork,那么创建出的子进程,代码也是从第五行开始执行的。又子进程复制了数据,代码。所以,在子进程内同理存在:$one,$two等变量
for ($i = 0; $i < 3; $i++) { $pid = pcntl_fork();}sleep(30);
那么:上面的for循环,实际会产生多少个子进程?答案是7个,在linux下,用ps命令将可以看到8个进程(1个父进程,7个子进程)
原因:父进程在 i = 0 时 , 创 建 出 一 个 子 进 程 0 , 此 时 的 子 进 程 , 还 会 继 续 执 行 循 环 。 创 建 出 属 于 自 己 的 子 进 程 。 同 理 : i=0时,创建出一个子进程0,此时的子进程,还会继续执行循环。创建出属于自己的子进程。同理: i=0时,创建出一个子进程0,此时的子进程,还会继续执行循环。创建出属于自己的子进程。同理:i=1时也会这样……
- Bài viết thuộc quyền sở hữu của tác giả trên website tainguyen.edu.vn, mọi sao chép phải dẫn nguồn đầy đủ và rõ ràng.
- Bất kỳ cá nhân hoặc tổ chức nào, nếu không có sự đồng ý của tác giả, đều bị cấm sao chép, chiếm đoạt, thu thập và xuất bản nội dung của trang này lên bất kỳ trang web, sách và các nền tảng truyền thông khác.
- Nếu nội dung trên bài đăng này bị vi phạm quyền và lợi ích hợp pháp của tác giả gốc, bạn có thể liên hệ với chúng tôi để xử lý.
- Tác giả bài viết tự chịu trách nhiệm về bản quyền bài viết, nội dung đã đăng tải tại bài đăng này