問題タブ [kevent]
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.
c - シグナルによって中断された場合、kevent はチェンジリストを破棄しますか?
動作をサポートしていないために発生する可能性が高い がkevent
返された場合、チェンジリストは適用されていますか?EINTR
SA_RESTART
EINTR
変更リストが適用された後にのみ発生する、スレッドがスリープ状態になった後にのみシグナルが生成されるため、私はそれが持っている印象を受けます。右?
python - Mac OSX のトルネード + kevent
最近、Mac OSX Yosemite でトルネードを実行しているときに問題が発生しました。tornado サーバーにリクエストを送信すると、次のトレースバックが返されます。
最後の行が最も重要です。これはbrewパッケージが見つからないためだと確信していますが、何が欠けているのか途方に暮れています.
さらに不思議なことに、select をインポートすると、kevent 関数が存在することがわかります。
nonblocking - 「特別な」epoll フラグは kqueue フラグにどのように対応しますか?
EPOLLONESHOT EPOLLET EPOLLEXCLUSIVE
epoll フラグと kqueue フラグ、特にEV_CLEAR/EV_DISPATCH/EV_ONESHOTの間の類似点を描くのに苦労しています。初めてkqueueを調査しています。私はepollでしか経験がありませんでした。
EV_DISPATCH
EPOLLEXCLUSIVE フラグと EPOLLONESHOT フラグを組み合わせたような感じです。kqueue のドキュメントから:
このイベントをポーリングした kqueue インスタンスが少なくとも 1 つある場合、イベントが通知され、すぐに破棄されるというドキュメントを正しく理解していますか? つまり、2 つの kqueue で EVFILT_READ のソケットをポーリングすると、それを受け取るのは 1 つだけです。その後、同じイベントが EVFILT_ENABLE で設定されるまで、新しいデータがソケットに届いたとしても、それ以上のイベントはまったく発生しません。 ?
EV_CLEAR
EPOLLETに近いようです。kqueue のドキュメントから:
したがって、たとえば、EVFILT_READ を持つ同じソケットが与えられた場合、それを同時にポーリングするすべての kqueues は、EVFILT_READ で起動します。ただし、すべてのデータが読み取られない場合 (つまり、EAGAIN まで)、それ以上のイベントは報告されません。すべてのデータが読み取られ、新しいデータが到着した場合にのみ、新しい EVFILT_READ イベントがトリガーされます。それが正しいか?
EV_ONESHOT
EPOLLONESHOT にマップされているようです。kqueue のドキュメントから:
質問
だから、質問:
- 私の理解は正しいですか?epoll と比較して、これらの特別なフラグを正しく理解できましたか? ドキュメンテーションは私には少し難しいようです。おそらく問題は、私が以前に epoll しか使用したことがなく、まだ kqueue を使用したことがないことです。
- kqueue テクニックを確認するための良い情報源または例を提供していただけますか? Boost.Asio のように複雑にならないようにすればいいのにと思います。また、これらのソースが C で書かれているとよいでしょう。
- これらのフラグを組み合わせることはできますか? たとえば、EPOLLONESHOT は EPOLLEXCLUSIVE と組み合わせることはできませんが、EV_DISPATCH はこれらのフラグのちょうど中間にあるようです。
ご協力ありがとうございました!
参考文献
macos - macOS kevents を使用して新たにフォークされたプロセスを監視する
1 のpidEVFILT_PROC
を使用して監視することにより、Kevents を使用して新しく作成されたすべてのプロセスを監視しようとしています。launchd
新しいプロセスが作成されたときにイベントを受け取ります。新しいプロセスの PID も名前も取得できません。
誰もこれに遭遇しましたか?
ありがとう!