私のmysqlデータベース内のアイテムのキューを処理するcakephpのシェルスクリプトに取り組んでいます。プロセスを高速化するために、次のように pcntlfork を使用しています。
$pids = array();
$i = 0;
for($i = 0; $i < count($queue); $i++)
{
$pids[$i] = pcntl_fork();
if(!$pids[$i]) {
# do code
exit();
}
}
このコードの実行中に、現在のスクリプトがキューから項目を削除する前に、シェル スクリプトが実行される場合があります。私はmysqlを使用していて、次のようにテーブルをロックしていました:
$this->Queue->query("SELECT GET_LOCK('".$this->mysqlLock."', ".$this->mysqlLockTime.") AS 'GetLock'");
この実装は機能せず、「一般的なエラー: mysql サーバーがなくなりました」というエラーが表示されます。これは、子供たちのつながりが失われているためです。PHP の fork 自体に欠陥があるようです。
私の質問は、このプロセスが終了するまでロックし、他のシェルスクリプトが実行できるように解放するためのより良い解決策はありますか?