私はセマフォを使用してアプリケーションの一部を同期しています。sem_release():キーを解放できませんでした0xc:無効な引数
sem_release():私はこの警告を取得していセマフォ(sem_release)の開放で
は、キーから0xCを解放するために失敗しました:無効な引数
最初に私がいるかどうかわかりませんセマフォーがリリースされましたが、結果として「真実」になっていないので、リリースしていないと思います。
PHPバージョン:2.25.2
のutil-Linuxからの5.6.30
IPCS -V => IPCSここセマフォである:ここ
key semid owner perms nsems
0x0000000c 4124122 myUser 666 3
は、コードの一部(ありますクラス同期):
...
if (!($this->semaphoreId = sem_get($this->id, 1)))
throw new RuntimeException('Error getting Semaphore.');
...
if (!sem_acquire($this->semaphoreId))
throw new RuntimeException('Error acquiring Semaphore.');
...
if (!sem_release($this->semaphoreId))
throw new RuntimeException('Error releasing Semaphore.');
PSこのエラーは私の生産的な環境でしか得られず、私はテスト環境で再現/デバッグできません。
インターネットでこのエラーメッセージを検索しましたが、何も見つかりませんでした。
誰でもこのメッセージの意味を知っていますか?
編集:
- は、エラーメッセージは、スクリプトが実行されているすべての時間は表示されません。
- 私は「Semaphoreのエラーを取得しています」というエラーが発生しました。「sem_acquire():キーを取得できませんでした。識別子が削除されました。
- 上記のクラスは、アプリケーションコードの一部を同期させるために異なるキーを使用しています。私は他のキーに問題はありません。そして、はい、このキー "12"/"0xc"は、同じ場所と同じユーザーからのみ使用されます。権限の問題がoccureべきではありません
- 、あなたがセマフォ「から0xC」のpermissonを確認した場合は「666」
自分のコードの一部と質問に何らかの形で回答した質問を編集しました – dritan
プログラムがデッドロックを作成していて、それを解放できないことがありますか? –
いいえデッドロックが発生した場合、プロセスリストにブロックされたプロセスが表示されるので、私はそうは思わない。 – dritan