问题标签 [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 上运行),如果父进程退出、退出、终止、被杀死或崩溃,我想杀死它自己。遵循了如何在父母退出后使子进程死亡的建议?如果父程序崩溃,我无法让它安静地自杀。在我手动杀死它之前,它将进入 100% CPU。
以下是代码的关键点:
c++ - Mac OS X 的文件系统观察器
目前,我们使用QFileSystemWatcher,属于Qt。由于 Mac OS X 的支持有限,它只能通知我们两个事件:目录更改或文件更改。
但是,后一个事件(文件更改)在其大小稍大并且写入磁盘需要稍长的时间时会多次触发。
我们的解决方法是设置一个计时器以在 1 秒内检查文件。如果在计时器到期之前有更多关于文件的信号出现,我们将重置计时器。
当文件写入磁盘(完成写入)时,有没有办法获得通知?没有必要限制 Qt,任何库都可以。
我们知道 kqueue 监控方法,但是这太低级了,我们不想对每个文件都这样做,因为我们正在监控文件系统的很大一部分。
python - kqueue 跟踪文件更改 - 在处理以前的事件时丢失事件的可能性?
我在做什么
我正在实现一个基于 python/kqueue (FreeBSD) 的解决方案来跟踪对特定日志文件的更改,当满足 KQ_NOTE_WRITE fflag 时,对文件的更改由我的 python 脚本中的另一个函数拾取和处理。
为什么我这样做
最终,我将获取最新的日志文件条目并将其发送到其他地方,作为快速'n'dirty 会计系统的一部分。
我认为我需要知道的
1)由于日志文件可以看到高流量的时期,我想知道是否会有任何“原子性”,即在将最新条目传递给日志文件时,我们会“错过”一个新条目吗?事实上,kqueue 是一个“队列”,我认为不是,但历史告诉我,我通常最终会觉得自己像个笨蛋。
2) kqueue 是否保证为每个事件触发,或者多个事件是否可以通过?我想象的情况是日志文件几乎同时产生 2 个单独的条目。
感谢任何智慧/建议。
ios - kQueue 目录监控
我的应用程序的 Documents 目录中有一个 kQueue 观察者。我正在使用在 Documents 目录内容更改时触发回调的 kQueue。
这是其中的两个设置
问题是当添加新文件时内容发生更改时我会收到通知,但实际文件尚未完全复制,所以当我尝试处理新文件时,我会遇到 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,服务器:本地主机,请求:“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 字段是什么?
我正在模拟 kqueue 的某些功能来处理我的 Centos 框中的事件(我正在从 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”的 struct kevent 变量。
让我们假设,我们可以毫无问题地找到一个新的事件 id,它不会与该 kqueue 实例的其他事件 id 发生冲突,名为“eventId”。
- 创建用户事件: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)可以按照我上面给出的那样工作。
我现在花了一天的时间试图找到说明它是如何完成的文档或示例。我在苹果代码库中找到了一个 kqueue 测试程序,但我怀疑它是否正确。此外,它仅在测试中发送 1 个事件,并且该事件终止接收线程的循环。所以这并不能帮助我理解我的 2 个用例的细节。
我计划在 x86 机器上的 FreeBsd 9.1 下使用它……暂时。
c - libevent kqueue 不适用于从 zmq_getsockopt() 返回的 fd
原始帖子: 我正在使用 libevent 和 zmq 编写 C 编程服务。使用 PUSH-PULL 模式将消息从 python 代码推送到 C 服务。
从 zmq 套接字接收到的 fd:
使用 Libevent,向 fd 注册事件以进行持久读取
在回调方法上,我正在做一个非阻塞接收
在 python 代码中,我不断地向套接字发送消息。
问题是我只能收到一次消息,之后事件回调永远不会被击中。如果我在 zmq_recv 之后的 read_data_on_zmq_cb 中执行 zmq_connect,那么它工作正常,但我想这是多余的,而不是正确的方法。这里有什么问题?
EDIT1: 除了在执行 zmq_recv() 之后检查 ZMQ_EVENTS 之外,您还需要获取所有消息,因为 zmq 是 EDGE 触发的。关于 EDGE 触发通知的一个很好的解释在这里http://funcptr.net/2012/09/10/zeromq---edge-triggered-notification/ 所以最终我的事件回调看起来像
c++ - kevent.ident 是无符号整数,而文件描述符是有符号的?
我有一个kevent ev
和一个int sock = socket(...)
。当我这样做时ev.ident == sock
,g++47 警告我warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
。我的方法有什么问题?