正确的阅读方式/ proc / pid / status

我这样读取/proc/<pid>/status

 std::ifstream file(filename); std::string line; int numberOfLinesToRead = 4; int linesRead = 0; while (std::getline(file, line)) { // do stuff if (numberOfLinesToRead == ++linesRead) { break; } } 

我注意到,在极less数情况下, std::getline挂起。

  1. 为什么会发生? 我以为proc文件系统应该处于某种一致的状态,不应该有新行丢失的情况。 我的假设是,当EOF /错误发生时, getline返回false
  2. 什么是推荐的, 安全的方式来读取/proc/<pid>/status

也许更确定的路径是使用fread到一个大的缓冲区。 状态文件很小,因此分配一个本地缓冲区并读取整个文件。

示例查看最简单解决方案的第二个答案

这可能仍然会失败,但应该返回一个明智的错误。

/ proc是一个虚拟文件系统 。 这意味着从“文件”中读取与从普通文件系统读取不同。

如果进程退出有关它的信息被从/ proc删除比如果它是真正的文件系统(这里涉及脏缓存刷新延迟)。

考虑到这一点,在你读下一行还没有被缓存的行之前,想象这个过程会退出。

解决办法是解决文件丢失,因为您可能不需要关于不再存在的进程的信息,或缓冲整个文件,然后只解析它。

编辑:在过程中挂起应明确与这是虚拟文件系统的事实有关。 它不像真正的文件系统一样。 由于这是特定的FS类型的问题可能是在FS驱动程序。 您提供的代码对于正常的文件读取看起来很不错。