【发布时间】:2010-09-24 11:59:40
【问题描述】:
在我的 PHP Web 应用程序中,我试图限制运行的 CPU/内存密集型进程的数量(例如,ImageMagick 的“转换”命令)。我有许多执行各种脚本的 crons 作业,这些脚本可能会执行这些 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也显示了线程和分叉。因此,如果其中一个 imagemagick 进程使用 3 个线程,它将显示 3 次。这可能是问题所在,但我不确定您将如何解决它。不过老实说,请按照下面的答案进行工作队列。
标签: php linux concurrency