問題タブ [kqueue]
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.
macos - 親が死んだ場合、子プロセスは自殺しません
親が終了、終了、終了、強制終了、またはクラッシュした場合に、自分自身を強制終了したいサブプロセス (MacOS で実行中) があります。親が終了した後に子プロセスを終了させる方法のアドバイスに従いましたか? 親プログラムがクラッシュした場合、静かに自分自身を殺すことはできません。手動で強制終了するまで、CPU は 100% になります。
コードの要点は次のとおりです。
c++ - Mac OS X のファイル システム ウォッチャー
現在、Qt に属する QFileSystemWatcher を使用しています。Mac OS X ではサポートが限られているため、ディレクトリの変更またはファイルの変更の 2 つのイベントしか通知できません。
ただし、後者のイベント (ファイルが変更された) は、そのサイズがわずかに大きく、ディスクへの書き込みに少し時間がかかる場合に複数回トリガーされます。
私たちの回避策は、1 秒でファイルをチェックするようにタイマーを設定することです。タイマーが切れる前にファイルに関するシグナルがさらに届いた場合は、タイマーをリセットします。
ファイルがディスクに書き込まれたとき (書き込みが終了したとき) に通知を受け取る方法はありますか? Qt に制限する必要はありません。どのライブラリでも可能です。
私たちは kqueue 監視方法を認識していますが、それは低レベルであり、ファイル システムの大部分を監視しているため、ファイルごとに実行したくありません..
python - kqueue 追跡ファイルの変更 - 前のイベントの処理中にイベントが失われる可能性はありますか?
私がしていること
KQ_NOTE_WRITE fflag が満たされると、ファイルへの変更が取得され、Python スクリプト内の別の関数によって処理されます。
なぜ私はそれをやっている
最終的に、私は最新のログファイル エントリを取得し、迅速で汚れた会計システムの一部として別の場所に送信します。
私が知る必要があると思うこと
1)ログファイルはトラフィックの多い期間を確認できるため、「原子性」があるかどうか、つまり、最新のエントリをログファイルに渡しているときに、入ってくる新しいエントリを「見逃す」のではないかと思いました。kqueue が「キュー」であるという事実は、私はそうではないと思っていましたが、歴史は、私が通常、そのような仮定のいたずら者のように感じることになることを教えてくれました。
2) イベントごとに kqueue が起動することが保証されているか、または複数のイベントがすり抜ける可能性がありますか? 私が想像しているケースは、ほぼ同時に 2 つの別々のエントリを生成するログファイルです。
知恵/アドバイスをいただければ幸いです。
ios - kQueueディレクトリの監視
アプリのDocumentsディレクトリにkQueueオブザーバーがあります。Documentsディレクトリの内容が変更されたときにコールバックをトリガーするkQueueを使用しています。
ここに2つの設定があります
問題は、新しいファイルが追加されたときに内容が変更されたときに通知を受け取ることですが、実際のファイルはまだ完全にコピーされていないため、新しいファイルを処理しようとするとSIGABRTがクラッシュします。
ファイルが完了するまで通知を遅らせるにはどうすればよいですか?
nginx - ストレス テストでの Nginx / PHP-FPM kevent() エラー
こんばんは
Nginx (1.2.7_1,1) と PHP-FPM (5.4.12) で FreeBSD ボックス (9.1-RELEASE) を実行しています。Apache AB を使用した同時リクエストの処理に大きな問題があります。
/var/log/httpd-error.log (数千単位) に表示される主なエラーは次のとおりです。
2013/03/08 11:11:10 [エラー] 99855#0: *44116 kevent() は、アップストリームへの接続中に connect() が失敗したことを報告しました (54: 接続はピアによってリセットされました)、クライアント: 10.128.28.179、サーバー: localhost 、リクエスト: "GET /index.php HTTP/1.0"、アップストリーム: "fastcgi://10.128.28.164:9000"、ホスト: "10.128.28.164"
サーバー (10.128.28.164) を参照すると、HTML および PHP ページで正常に動作します。
どんな助けでも素晴らしいでしょう!!
ピート。
私の php-fpm.conf ファイルは次のようになります。
私の nginx.conf ファイルは次のようになります。
freebsd - struct keventのudataフィールドとは何ですか?
Centosボックス内のイベントを処理するためにkqueueの特定の機能をエミュレートしています(FreeBSDからいくつかのコードを移植しています)が、void *udata
inの目的を理解できていませんstruct kevent
:
検索してみましたが、このフィールドについて見つけた最長の文献は、「カーネルを変更せずに渡された不透明なユーザー定義値」です。これはあまり役に立ちません。
誰かがこの分野が何であるかをはっきりと私に説明できますか?そして、誰かがそれを何のために使うことができますか?
kqueue - kqueue を使用して複数のイベント タイプに応答する
イベントが登録されたとき、kqueue
そのイベント タイプに関連する ID が提供されます。たとえば、ファイル記述子は、監視するファイルを識別するために使用されます
ここで、シグナルなどの他のイベント タイプにも応答する必要がある場合は、 のident
引数との競合を避けるために、kqueue の新しいインスタンスが必要です
kevent()
。
複数のイベント タイプを監視するには、共有状態で動作する複数のスレッドが必要になるようです (たとえば、シグナルを受信すると、ファイル記述子が閉じられる可能性があります)。
kqueue を使用してあるスレッドから別のスレッドにメッセージを送信するためのより一般的なメカニズムはありますか? 場合によっては、別の kevent をエッジ トリガーする手段としてフィルターを有効または無効にすることを考えることができます。
freebsd - EVFILT_USER に kqueue を使用する
ユーザー空間イベントにkqueueを使用する方法を理解するのに苦労しています。
2つのユースケースを探しています。
ユース ケース 1: 手動リセット イベント
ユース ケース 2: 自動リセット イベント
kqueue() と kevent() の使用方法は理解していると思いますが、kevent() に渡されたイベントが関連する操作をどのように検索するかについては不明です
。「event」という名前の構造体 kevent 変数があるとします。
「eventId」という名前の、その kqueue インスタンスの他のイベント ID と衝突しない新しいイベント ID を問題なく見つけることができると仮定しましょう。
- ユーザーイベントの作成: EV_SET(&event, eventId, EVFILT_USER, EV_ADD, NOTE_FFNOP, 0, NULL)
- ユーザーイベントの破棄: EV_SET(&event, eventId, EVFILT_USER, EV_DESTROY, NOTE_FFNOP, 0, NULL)
- ユーザーイベントを設定します: EV_SET(&event, eventId, EVFILT_USER, ?????, NOTE_FFNOP, 0, NULL)
- ユーザーイベントのリセット: EV_SET(&event, eventId, EVFILT_USER, ??EV_CLEAR???, NOTE_FFNOP, 0, NULL )
- パルスユーザーイベント: EV_SET(&event, eventId, EVFILT_USER, 0, NOTE_TRIGGER, 0, NULL )
- 待機ループでは、切り取られたものが続くと思います: if( event.filter == EVFILT_USER && event.ident == eventId ) { // これは私のイベントです! 何とかしろ!}
????を参照してください 上記の EV_SET() 呼び出しで、助けが必要な場所を確認します。
ユース ケース 1 (手動リセット イベント) の操作 (1) 作成は、ユース ケース 2 (自動リセット イベント) とは異なる場合があります。
操作 (3) と (4) 私は完全に暗闇の中にいます。それらには EV_ENABLE/EV_DISABLE が必要ですか? EV_CLEAR はどこに適合しますか?
これまでのところ、操作 (6) では「ディスパッチ」以外は何もする必要はないと想定しています。上記のように操作 (5) が機能する可能性があることはかなり肯定的です。
私は今、それがどのように行われているかを示すドキュメントやサンプルを探すのに 1 日を費やしました。Appleコードベースでkqueueテストプログラムを見つけましたが、それが正しく機能しているとは思えません。また、テストで 1 つのイベントのみを送信し、そのイベントは受信スレッドのループを終了します。そのため、2 つのユース ケースの詳細を理解するのに役立ちません。
x86 マシンの FreeBsd 9.1 で使用する予定です...今のところ。