首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inotify 'main loop‘

inotify 'main loop‘
EN

Stack Overflow用户
提问于 2009-08-15 01:12:49
回答 3查看 977关注 0票数 0

我通过在inotify文件描述符上设置O_ASYNC标志,然后使用fcntl(inotifyfd,F_SETOWN,getpid())和一个信号(sighandler,SIGIO)调用来使用inotify和"interupt“,以便设置一个inotify文件描述符事件处理程序。

其思想是让inotify的文件描述符生成SIGIO信号(通过O_ASYNC标志设置),并让信号(..)注册的处理程序在发出SIGIO信号时对其进行处理,从而避免轮询inotify文件描述符。

在初始设置和信号处理程序设置之后,进程将不会执行任何操作,并将正常退出。

我需要相同的进程在设置后保持空闲,因为它充当等待SIGIO信号的守护进程。这就是我寻求帮助的地方。

如何使进程空闲以占用最少的cpu资源?

EN

回答 3

Stack Overflow用户

发布于 2009-08-15 02:22:04

如果您的进程将保持空闲状态,直到它看到inotify事件,那么您将使事情严重复杂化。

只需在inotify文件描述符上执行普通的阻塞read()即可。当发生inotify事件时,您的进程将被唤醒。如果您想使用超时阻塞,以便可以定期检查其他内容,请使用select()

一般来说,我发现如果答案是“信号”,那么您可能问错了问题:)

票数 6
EN

Stack Overflow用户

发布于 2009-08-15 01:33:44

一种简单的方法是在很长一段时间内只使用sleep(3)。由于信号会唤醒进程,因此您需要将休眠放在循环中:

代码语言:javascript
复制
while(1)
    sleep(1000);

更正确的方法可能是使用sigsuspend(2)

代码语言:javascript
复制
sigsuspend(NULL);
票数 2
EN

Stack Overflow用户

发布于 2009-08-15 01:36:18

在这种情况下,只需在sigsuspend();上循环,或者甚至在sleep()上循环。但请记住,一个SIGIO信号可能会有一个或多个IO事件可用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1280893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档