我正在处理 cakephp 中的 shell 脚本,该脚本处理我的 mysql 数据库中的项目队列。为了加快我使用 pcntlfork 的过程,如下所示:
$pids = array();
$i = 0;
for($i = 0; $i < count($queue); $i++)
{
$pids[$i] = pcntl_fork();
if(!$pids[$i]) {
# do code
exit();
}
}
在执行此代码时,shell 脚本可能会在当前脚本有时间从队列中删除项目之前运行。我正在使用mysql并像这样锁定表:
$this->Queue->query("SELECT GET_LOCK('".$this->mysqlLock."', ".$this->mysqlLockTime.") AS 'GetLock'");
此实现不起作用,给我错误“一般错误:mysql 服务器已消失”。这是因为孩子们失去了联系。这似乎是 php 中 fork 本身的一个缺陷。
我的问题是有更好的解决方案来锁定这个进程直到它完成然后释放它以供其他 shell 脚本执行?