小编ine*_*ber的帖子

如何在不使用堆栈跟踪器的情况下检查进程在 linux 中是否非阻塞?

多 CPU 服务器正在运行多个进程。一个进程有一个线程应该始终处于旋转状态,使用它分配的 CPU 的 100%。我当前的方法(除了询问开发人员...)正在strace等待信息到达其打开的文件描述符的进程上使用recvfrom(2)erno并使用where设置为连续检查它,EAGAIN并且方法在没有数据包时返回 -1从网络套接字。

我不习惯堆栈跟踪生产设置,这是一种确定这些信息的笨拙方法。我正在proc(5)探索并认为标志字段的值/proc/[pid]/fdinfo可能有助于检查该进程是否正在使用open(2)以该O_NONBLOCK模式调用的套接字。

我目前正在努力对这个值进行逆向工程。我知道它代表文件状态和文件模式的按位或。所以我想我可以检查源头文件中常量open(2)在那个特定内核上使用的值,然后按位或它们,直到我找到一个与fdinfo. 这看起来很笨拙,如果有人可以验证上述方法(我还不能)或提供更优雅的解决方案,我将非常感激。

我也知道fnctl(2)可以将文件描述符设置为非阻塞状态,但我暂时将其视为打开

linux kernel blocking socket

5
推荐指数
1
解决办法
2863
查看次数

标签 统计

blocking ×1

kernel ×1

linux ×1

socket ×1