如何限制进程数?

时间:2010-09-24 11:59:41

标签: php linux concurrency

在我的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'命令),我看到的进程比我预期的要多得多。有什么想法吗?

2 个答案:

答案 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开关来安装它