我通过在inotify文件描述符上设置O_ASYNC标志,然后使用fcntl(inotifyfd,F_SETOWN,getpid())和一个信号(sighandler,SIGIO)调用来使用inotify和"interupt“,以便设置一个inotify文件描述符事件处理程序。
其思想是让inotify的文件描述符生成SIGIO信号(通过O_ASYNC标志设置),并让信号(..)注册的处理程序在发出SIGIO信号时对其进行处理,从而避免轮询inotify文件描述符。
在初始设置和信号处理程序设置之后,进程将不会执行任何操作,并将正常退出。
我需要相同的进程在设置后保持空闲,因为它充当等待SIGIO信号的守护进程。这就是我寻求帮助的地方。
如何使进程空闲以占用最少的cpu资源?
发布于 2009-08-15 02:22:04
如果您的进程将保持空闲状态,直到它看到inotify事件,那么您将使事情严重复杂化。
只需在inotify文件描述符上执行普通的阻塞read()即可。当发生inotify事件时,您的进程将被唤醒。如果您想使用超时阻塞,以便可以定期检查其他内容,请使用select()。
一般来说,我发现如果答案是“信号”,那么您可能问错了问题:)
发布于 2009-08-15 01:33:44
一种简单的方法是在很长一段时间内只使用sleep(3)。由于信号会唤醒进程,因此您需要将休眠放在循环中:
while(1)
sleep(1000);更正确的方法可能是使用sigsuspend(2)
sigsuspend(NULL);发布于 2009-08-15 01:36:18
在这种情况下,只需在sigsuspend();上循环,或者甚至在sleep()上循环。但请记住,一个SIGIO信号可能会有一个或多个IO事件可用。
https://stackoverflow.com/questions/1280893
复制相似问题