如果不是/proc/sys/fs/epoll/max_user_watches的问题那么很可能是资源限制造成的,限制了每一个进程打开的fd数,他也会返回EMFILE的错误。
#include <unistd.h>
#include <stdio.h>
#include <sys/resource.h>
int main(void)
{
struct rlimit rlim;
getrlimit( RLIMIT_NOFILE , &rlim);
printf( "MFDS is %ld\nCFDS is %ld\n" , rlim.rlim_max , rlim.rlim_cur);
return 0;
}
运行这个程序查询一下你的系统对进程资源的限制,如果是这个原因可以调用setrlimit修改RLIMIT_NOFILE,把这个数改大,该操作需要root用户权限