在我的PHP Web应用程序中,我试图限制运行的CPU /内存密集型进程的数量(例如,ImageMagick的'convert'命令)。我有许多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'命令),我看到的进程比我预期的要多得多。有什么想法吗?
答案 0 :(得分:2)
我认为更好的方法是工作控制者或工作队员...... 但是,如果那对你来说不可能,因为你的东西是如此分开,你的方法看起来很糟糕。但我可以从这里告诉你的ps命令应该总是只返回“php”maby更好地检查执行文件或用户或什么?
你在说什么其他流程? php进程?它们看起来像什么,执行?您还可以查看此链接http://www.php.net/manual/en/function.sem-get.php
答案 1 :(得分:0)
对于这个用例,php有信号量扩展
resource sem_get ( int $key [, int $max_acquire = 1 [, int $perm = 0666 [, int $auto_release = 1 ]]] )
http://www.php.net/manual/en/function.sem-get.php
我认为这可以满足您的需求,但信号量不是日常扩展,所以我可能需要通过php中的--enable-sysvsem
开关来安装它