5

我想从/proc目录中检索一些进程信息,我的问题如下: 中的文件是否有标准格式/proc/PID
例如,有这个proc/PID/status文件Name:'\t'ProcName在它的第一行。我可以在其他地方用空格代替这个文件\t吗?

4

1 回答 1

6

首先,Linux 中的文档在/procLinux 源文件中提供,在Documentation/filesystems/proc.txt. 如果要使用 procfs,那应该是您首先考虑的地方。可悲的是,AFAICS 它没有提到确切的记录格式。

第二个要看的地方是procps源(即提供ps工具的包)。在那里你可以找到:

colon = strchr(S, ':');
if(unlikely(!colon)) break;
if(unlikely(colon[1]!='\t')) break;

这意味着ps依赖于:\t存在。因此,您可以假设所有当前的 Linux 内核都使用这种格式。此外,我怀疑微小的变化(比如用\t其他东西替换)是否会被认为足以破坏与旧版本ps工具的兼容性。

也就是说,您通常可以在接受的内容上更加自由。考虑到该文件的具体内容,您可以假设冒号是字段分隔符,并删除它后面的任何空格。如果您使用的是 shell 脚本,那么常规的字段分隔就足够了。

最后,我想说几点:

  1. status文件应该是人类可读的。因此,程序通常更好地读取stat文件,而不是设计为面向机器的文件。
  2. 我在这里只考虑 Linux(基于标签)。不同的系统可能有一点不同的/proc格式。
  3. 如果您正在编写 C 程序(shell标签是由编辑器添加的),您应该考虑使用libprocps随附的库而procps不是手动读取文件。这样,您就可以避免重新发明轮子并直接依赖特定格式。
于 2012-11-24T11:13:40.660 回答