php一些分叉进程一直在运行

php一些分叉进程一直在运行,php,debian,multiprocessing,fork,Php,Debian,Multiprocessing,Fork,我有一个php脚本,它将任务分成多个部分,并在单独的子进程中运行每个部分。代码如下所示: foreach($users as $k => $arr) { if(($pid = pcntl_fork()) === -1) continue; if($pid) { pcntl_wait($status,WNOHANG); continue; } ob_start(); posix_setsid(); dbConnect(); // do st

我有一个php脚本,它将任务分成多个部分,并在单独的子进程中运行每个部分。代码如下所示:

foreach($users as $k => $arr) {
  if(($pid = pcntl_fork()) === -1) continue;
  if($pid) {
      pcntl_wait($status,WNOHANG);
      continue;
  }
  ob_start();
  posix_setsid();
  dbConnect();
  // do stuff to data
  exit();
}
我在Debian服务器上使用crontab运行这个脚本,但问题是一些进程保持运行并保留内存。一段时间后,服务器的内存被淹没。
我需要找到一种方法来确保所有过程都正确完成。

您对数据所做的工作需要很长时间或永远。您需要调试执行的操作。

我认为问题在于在pcntl\u等待调用中使用WNOHANG。这意味着pcntl_wait函数存在于子进程之前,您希望它能够并发地分叉其他子进程。但它有一个副作用,那就是主要的父母在一些孩子之前就完成了学业。此链接介绍如何使用pcntl_wait与WNOHANG循环,直到所有子进程完成。

非常感谢它现在工作正常,父进程等待其所有子进程完成运行,然后退出。