我从尝试分叉()或生成线程中获得了一堆EAGAIN,这使我相信我在某个地方泄漏资源。
在POSIX中,是否有可能从流程本身中获得以下信息:
活动管道的活动pthreads
,
?
还是必须手工计算?已经有柜台了,但我想其中一个漏水了。
发布于 2012-04-10 17:26:17
我猜你得到EAGAIN是因为你达到了资源限制。系统限制了可以运行的线程/进程的数量。你可以用
cat /proc/sys/kernel/threads-max然后用
echo 100000 > /proc/sys/kernel/threads-max分别使用。更有可能的是,您正遇到用户对进程的限制。您应该阅读手册页,并在getrlimit和ulimit上进行搜索。这里有很多关于这些的信息。
假设您是从一个父程序中生成所有这些进程,那么跟踪它们应该很容易。在fork()之前增加父级中的计数器。如果孩子们正在孕育孩子,那么它会变得更加复杂,您将需要使用共享内存或其他一些IPC机制。在任何情况下,您都可以使用wait()和waitpid()系统调用确定子进程的状态,并在此基础上减少进程计数器。wait返回的状态数据将告诉您每个子节点的终止处理。再一次,有相当多的问题在上面,所以如果你遇到麻烦的话,就会涉及到相当多的细节。
在回答您的主要问题时,有一些方法可以查询系统(通常是通过/proc)来查询您所关注的一些资源。如果你关心自己的资源,这几乎总是错误的做法。这是在你的能力范围内,随时跟踪他们自己-和更有效率。
祝好运。希望这能把你引向正确的方向。
https://stackoverflow.com/questions/10069811
复制相似问题