問題タブ [flock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 群れ、フォーク、および終了する親プロセスによるデッドロック
私はかなり複雑なPythonプログラムを持っています。内部的には、排他的(LOCK_EX
)を使用fcntl.flock
してグローバルロックを管理するロギングシステムがあります。事実上、ログメッセージがダンプされるたびに、グローバルファイルロックが取得され、メッセージがファイルに発行され(ロックファイルとは異なります)、グローバルファイルロックが解放されます。
プログラムはまた、(ログ管理が設定された後)それ自体を数回フォークします。一般的にすべてが機能します。
親プロセスが強制終了された場合(そして子が生きたままの場合)、デッドロックが発生することがあります。すべてのプログラムはfcntl.flock()
永久にブロックされます。外部でロックを取得しようとすると、永久にブロックされます。私は問題を解決するために子供たちのプログラムを殺さなければなりません。
しかし、困惑しているのはlsof lock_file
、ロックを保持するプロセスがないことです。そのため、ファイルがカーネルによってロックされている理由を理解できませんが、ファイルを保持していると報告されるプロセスはありません。
flock
フォークに問題がありますか?死んだ親は、プロセステーブルに存在しなくなったにもかかわらず、どういうわけかロックを保持していますか?この問題を解決するにはどうすればよいですか?
php - PHP - PHPUnit - ファイルロックを保護する機能のテスト
私はコア ライブラリの単体テストの更新に取り組んでおり、ファイルロック (群れ) に関するシナリオに出くわし、他の人がこれらの種類の単体テストをどのように実装したかを知りたいと思いました。
基本的に、コンテンツをファイルに書き込むユーティリティ File クラスがあります。
そして私の単体テストは次のようになります:
テスト コードからわかる$this->destFileUri
ように、メソッドへの API 呼び出しを行う前に、明示的なロックを設定していますwrite()
。私が期待するのは、例外throw new CoreLib_Api_Exception('Unable to obtain lock on file');
がスローされることです。代わりに、単体テストが無期限にハングします。
ファイルがロックされているかどうかをテストする適切な方法は何ですか?
前もって感謝します。
php - PHP 同時ファイルアクセス / flock() の問題
ファイルからjson文字列を解析し、同じIDでオブジェクトを上書きするか、json配列に追加してファイルに書き戻すスクリプトの実装に問題があります。スクリプトは for ループで呼び出されるため、flock を使用して、json 文字列が解析される前にファイルが上書きされないようにしようとしましたが、結果は非常に奇妙に見え、何が問題なのかわかりません。スクリプトは次のとおりです。
その結果、「.json」と呼ばれる 3 つのファイルと、正しくuserid .json と log.json の 3 つのファイルが得られることがあります。26 個のオブジェクトすべてが正しく表示されているため、ログは最適に見えますが、以前に存在するオブジェクトをチェックしていません。「.json」は空白で、非常に奇妙に見えます。
私も例外を取得します:
手順を正しく理解していなかったと思います。何か助けていただければ幸いです。
編集:私が望む結果は、次のようになります:
乾杯、ダニエル
php - flock() の使い方
競合状態を回避するためにシステム ロックを使用したいと考えています。1 つのプロセスは、キャプチャした画像を .jpg ファイルに保存する opencv プログラムです。もう 1 つのプロセスは、サーバーから同じ画像ファイルを取得するブラウザです。これら 2 つのプロセス間の競合状態を回避したい。私は群れ機能を正しく使用していますか?
私のopencvコードは次のとおりです。
そして、私の.phpファイルは
この php は、AJAX を使用してクライアント側から呼び出されます。
c - 複数のスレッドが同時に群れを取得できる
flock(2)はスレッド セーフであるという印象を受けました。最近、複数のスレッドが同じファイルのロックを取得できるコードのケースに出くわしました。 c api 群れ。プロセス 25554 は、20 個のスレッドを持つマルチスレッド アプリであり、デッドロックが発生すると、同じファイルにロックされているスレッドの数が異なります。マルチスレッド アプリのtestEventはファイルへのライターであり、プッシュはファイルからのリーダーです。残念ながら、lsof
LWP の値が表示されないため、ロックを保持しているスレッドを特定できません。以下の条件が発生すると、プロセスとスレッドの両方が群れの呼び出しで停止しますpstack
。strace
pid 25569 および 25554 を呼び出します。RHEL 4.x でこれを克服する方法についての提案。
私が更新したかったことの 1 つは、メッセージの tx レートが 2 mbps を超える場合に限り、flock は常に誤動作しないということです。その tx レートを下回ると、すべてがファイルになります。num_threads
= 20、 = 1000バイトを一定に保ち、size_of_msg
1秒あたりのメッセージ送信数を10メッセージから100メッセージに変更しました。これは20 * 1000 * 100 = 2 mbpsであり、メッセージ数を150に増やして群れの問題を引き起こします起こります。
flockfile c api についてのご意見をお聞かせください。
write_data_lib_func
lib 関数を呼び出すマルチスレッド テスト プログラム。
上記のメソッドは、テストのメイン関数の pthreads で呼び出されます。
}
ここにライター/リーダー ソースがあります。独自の理由により、単にカット アンド ペーストしたくありませんでした。ライター ソースは、プロセス内の複数のスレッドにアクセスします。
リーダー側には、スレッドのないデーモン プロセスがあります。
php - flock() を使用してファイルが既にロックされているかどうかを確認しますか?
書き込み先のファイルがありますが、最初に ( を使用して) ロックしてflock()
、他のスクリプトがそのファイルに書き込めないようにする必要があります。ので、私は持っています:
ただし、他のスクリプトが書き込みできないように、既にロックされているかどうかを確認する必要があります。
これどうやってするの?
php - 動作しないファイルパスの配列でflock()を使用する
特定のフォルダ内のすべてのファイルをロックする機能があります。
だから私はこの関数を呼び出します:
これで、フォルダ内のすべてのファイルが見つかり、それらを配列に割り当てたように見えますが、何らかの理由で、ファイルがロックされていないようです。それをテストした後(sleep()を使用し、他のスクリプトでファイルに書き込もうとした後)flock()
、ファイルに何の影響も及ぼさないようです。
なぜこれが起こっているのか考えはありますか?
ありがとう
c - flock()、次に fgets(): 低レベル ロック、次に stdio 読み取り/書き込みライブラリ関数。出来ますか?
私はサーバー Web を書いています。
各接続は個別のスレッドによって処理されるため、事前にスレッド数がわかりません。
テキストファイルのグループもあり (番号もわかりません)、各スレッドは各ファイルを読み書きできます。
ファイルは一度に 1 つのスレッドだけが書き込むことができますが、異なるスレッドが異なるファイルに同時に書き込むことができます。
ファイルが 1 つ以上のスレッドによって読み取られる場合 (読み取りは同時実行可能)、どのスレッドもそのファイルに書き込むことはできません。
今、私はこの(スレッドセーフなマルチファイル書き込み)ソリューションに気付きましたが、たとえば fgets() などの関数も使用したいと思います。
では、ファイルをflock()してから fgets() または別の stdio 読み取り/書き込みライブラリ関数を使用できますか?
php - 同時に同じファイルに書き込む
わかりました。このサイトでこの問題について同様の質問があったことは知っていますが、この質問と提供された回答はどれも私が必要としているものではありません。
フラットファイルベースのCMSを構築しています。たとえば、次の場合はどうなりますか。
2、3、10 .....追加モードのfwriteリクエストは、同じphpファイル「contact_form_messages_container.php」に同時に送信されますか?
2、3、10 ..... fwrite in "w"モードのリクエストは、特定のページへのアクセスの単純な数を保持する同じphpファイルに届きます。
flock()関数については知っていますが、2つ以上のflock()リクエストが同時に発生する可能性があります...この問題の解決策を知っている人はいますか?私が頭に浮かぶのは、usleep()-ターゲットファイルが使用可能になるまで、しばらくの間ループ中にスクリプトを使用することですが、それが機能するかどうか、どこで、どのように実行するかわかりません。誰かがこの問題について実際的な経験を持っていますか?前もって感謝します!
perl - Perl:flock()はLinuxで動作し、AIXでの以前のロックを無視します
一言で言えば:flock()を使用してPerlスクリプトを作成しました。Linuxでは、期待どおりに動作します。AIXでは、flock()を使用するスクリプトの別のインスタンスがロックファイルの排他ロックを保持している必要がある場合でも、flock()は常に1を返します。
プログラムを再起動するためのBashスクリプトを出荷し、flock(1)を使用して、同時再起動によって複数のプロセスが作成されるのを防ぎます。最近、AIXにデプロイしました。この場合、flock(1)はデフォルトでは提供されず、管理者によって提供されません。物事を単純に保つことを望んで、私は次のようにflockと呼ばれるPerlスクリプトを書きました。
(flock -n -x 200; sleep 60)200> lockfileを2つのターミナルタブからほぼ同時に2回実行して、スクリプトをテストしました。
Linuxでは、予想どおり、2回目の実行は「リソースが一時的に利用できません」で終了します。
AIXでは、2回目の実行でロックが取得され、flock()は1を返しますが、これは間違いなく予期されていません。
flock()は、flock(1)を使用するLinuxバージョンとfcntl(1)を使用するAIXバージョンの2つのシステムで異なる方法で実装されていることを理解しています。これが私の問題をどのように引き起こし、どのように解決するかを理解するのに十分な専門知識がありません。
アドバイスをありがとうございます。