在我的PHP网络应用程序中,我试图限制运行的CPU/内存密集型进程数量(例如,ImageMagick的“convert”命令)。我有许多cron作业执行各种脚本,这些脚本可能会执行太多这些CPU/内存密集型进程的实例。
为了限制这样的进程,我首先检查系统是否已经运行了一定数量的进程。以下是该函数:
function has_reached_process_limit($process, $limit)
{
$command = 'ps -eo comm | grep ' . $process;
exec($command, $output, $return);
if (count($output) > $limit)
{
return TRUE;
}
else
{
return FALSE;
}
}
所以,我运行类似这样的东西:
while (has_reached_process_limit('convert', 5) === TRUE)
{
// loop over
}
问题在于,当我通过“top”命令监视我的操作系统资源时,我看到的进程数比我期望运行的要多得多。有任何想法吗?
ps
也显示线程和fork。因此,如果其中一个imagemagick进程使用3个线程,它将显示3次。这可能是问题所在,但我不确定该如何解决。不过,老实说,最好采用下面的答案并使用工作队列。 - ryeguy