问题标签 [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.

0 投票
1 回答
935 浏览

select - 如何使用 kevent 和选择?

kqueue() 返回的 kevent 的文件描述符可以用作 select() 或 kevent() 的输入。

  1. 使用这种方法有什么好处?

  2. 假设 kevent 正在使用 kevent() 等待描述符列表,并且该列表中有一些活动。kevent 的文件描述符会被设置,被 select() 或 kevent() 读取吗?

0 投票
2 回答
800 浏览

cocoa - 保存文件后文件监视器停止

kqueue我正在尝试通过一个名为 UKKQueue 的包装器来监控单个文件的版本,这里提供。这个包装器非常简单,这是我正在使用的测试代码:

位于的文件/Users/bruno/Desktop/SyncTestLog是纯文本文件。当我使用nano从终端编辑它时,输出按预期显示:

现在,当我使用 TextEdit 或 TextWrangler 对其进行编辑时,在我第一次保存文件后,监控停止报告更改。以下是报告的最后事件:

据我了解, UKKQueue 使用open()使用 flag获取类似 unix 的文件描述符O_EVTONLY。出于某种原因,TextEdit(和 TextWrangler)UKKQueueFileDeletedNotification在保存文件时会生成此通知。

我需要的是“永远”继续监听文件中的更改。我想我可以在UKKQueueFileDeletedNotification到达时重新创建监视器,但我正在寻找更干净的东西。

谢谢

编辑: 我刚刚在Google Toolbox For Mac中找到了一个名为GTMFileSystemKQueue的类,它可以解决我的问题。我的问题仍然没有答案。

0 投票
2 回答
323 浏览

python - 在 FreeBSD 上使用 python 和 kqueue 检测给定路径下的文件创建或删除

在 FreeBSD 系统上给定 /certain/path/ ,我希望 python 使用 kqueue 来检测是否在该路径下的任何位置创建或删除了任何文件。

我该怎么做?

0 投票
2 回答
1562 浏览

python - 使用 vim 写入文件不会在 OS X 上触发文件更改事件

我正在使用看门狗来监视 OS X 上的 .less 文件更改事件。如果我使用 TextMate 或 Sublime Text 更改 .less 文件的内容,则会捕获修改事件。但是,如果我使用 vim 编辑内容,则不会触发文件修改事件(但会捕获使用 vim 创建的文件的文件创建事件)。我已经看到了 FSEvents 和 kqueue 的相同行为(我对这两者的了解几乎为零)。

我想知道有人可以解释这种行为吗?

0 投票
1 回答
1640 浏览

node.js - fs.watch 在 Mac OSX 上通过 Node 0.5.9

我在 Node v0.5.9 上运行以下命令:

然后我做:

  • cd /Users/username/testingFsWatcher/
  • >file1-->{ '0': 'rename', '1': null }
  • mkdir new_folder-->{ '0': 'rename', '1': null }
  • >new_folder/file2--> 没有事件触发/输出
  • touch file1--> 没有事件触发/输出
  • rm file1-->{ '0': 'rename', '1': null }

我注意到有两件事似乎不正确:子目录 ( new_folder) 不被监视,并且对监视文件的更新/修改不会触发change事件。查看节点代码和测试,似乎这些应该是可能的。

那么,是否可以fs.watch查看目录及其所有子目录?是否至少可以从文件修改中获取事件?此外,据我所知,fs.watch支持kqueueeventid(在 OSX 中)相关的,是否有可能得到它eventid

注意:我专门使用fs.watch而不是fs.watchFile因为我需要观看整个目录(最好也是所有子目录:)。

谢谢您的帮助!

0 投票
1 回答
767 浏览

java - NIO 选择器是否默认使用事件通知?

我发现这篇文章说 OpenJDK 在 linux 上使用 epoll,但是有人知道 Selector 实现是否使用 kqueue、dev/poll 等而不是可用的传统轮询?

0 投票
1 回答
1164 浏览

python - 使用 python select.kqueue() 检查文件是否被修改删除或扩展

嗨,我很难理解如何使用仅 BSD 的 python 模块类 select.kqueue 和 select.kevent 来设置文件写入事件的监视。

每当另一个进程写入文本文件时,我希望 python 程序做出响应。我的测试代码如下:

我不知道如何继续检查这些事件是否确实发生了。有人可以指出一个使用 kqueue 检测文件修改或任何其他事件的示例(如文件删除、文件重命名等)

0 投票
0 回答
621 浏览

macos - Mac OS X 如何以编程方式检测更改的文件是否仍在被更改文件的同一进程“使用”?

我正在调查我们开发的实用程序的问题。我们跟踪文件或目录,并在发生更改时将新版本上传到中央存储库。我们的实用程序类似于 Dropbox,因为您可以跟踪更改,但它更多的是版本跟踪器而不是同步实用程序。

我们可以检测文件何时被更改。但我们希望能够检测做出更改的过程是否仍在“使用”它……因为没有更好的术语。

当用户在某些程序中打开文件并定期点击保存时,就会出现此问题。或者,最糟糕的是,自动保存功能每隔几分钟保存一次正在进行的工作。我们希望能够检测到这一点并仅在需要时保存,例如当用户最终保存并关闭文件时。如果一个具有自动保存功能的程序整夜打开,我们最终会得到数百个相同文件的无用版本。

  1. 是否可以检测到哪个进程保存了文件?
  2. 是否可以检测该进程是否仍在“使用”该文件。

这在 Windows 中很简单,但在 Mac 中却非常复杂。此外,我们是 windows 和 ios 开发人员,对 OS X 不是那么专业,尤其是当它变成 linuxy 时。

0 投票
2 回答
901 浏览

c - 使用 NBIO 的高效预分叉服务器设计,例如使用 libevent 的 epoll、kqueue

我正计划编写一个“彗星”服务器,用于向客户“流式传输”数据。过去我增强了一个以利用多核 CPU,但现在我从头开始。我打算使用 epoll/kqueue 或 libevent 为服务器供电。

我一直在权衡的问题之一是使用什么服务器设计?我有几个可用的选项,因为我计划使用多进程模型来利用所有 CPU 内核。

  1. 预分叉的多进程 - 每个进程都有自己的接受
  2. 带有主进程的预分叉多进程 - 主进程接受然后使用描述符传递将接受的套接字传递给进程
  3. 具有不同端口的预分叉多进程 - 每个进程侦听同一系统上的不同端口。负载均衡器根据来自各个守护进程的一些负载反馈来决定哪个进程获得下一个连接

设计#2 是最复杂的。设计#3 很简单,但无论设计如何,我都需要额外的硬件,因为我将在多台机器上运行它,并且无论如何都需要负载均衡器。设计#1 有雷群问题,但我想雷群对于 8 个进程来说并不是什么大问题,但是当客户端不断连接和断开连接时它就变得很重要(这应该很少见,因为这是一个彗星服务器)。

正如我所看到的,#2 很复杂,并且需要 2 个额外的系统调用,因为描述符在每个接受的主从进程之间传递。将这种开销与雷鸣般的羊群问题相对会更好吗?如果我有 8 个进程唤醒并执行接受,我是否可能会看到 8 个接受调用,以防我使用设计#1?

我的设计选择的优缺点是什么?你会推荐什么?

0 投票
1 回答
581 浏览

macos - Mac OS X 上的 kqueues:奇怪的事件顺序

我使用 kqueues/kevent(2) 在单独的线程中监视文件的更改。(我监控一个 Python 文件进行重新解析)

我订阅如下:

当我使用 Vim 写入文件“/tmp/somefile.py”时,我得到两个单独的 kevent: 这些事件的标志 (event.fflags) 是:

我从来没有收到过“NOTE_WRITE”事件!这似乎与 Vim 写入这些文件的方式有关,因为如果我这样做了

我确实得到了:

事件。

奇怪,嗯?我没有检查 Vim 源代码,但它必须做一些奇怪的事情,或者它只是使用以这种方式实现的用户级函数?

我真的没想到会这样。这是一个已知问题,我只需要检查所有可能的事件,还是有一个已知的接口可以真正检查文件是否已被写入?