我想从/proc
目录中检索一些流程信息,我的问题如下:/proc/PID
中的文件是否有标准格式?
例如,第一行中有proc/PID/status
个文件Name:'\t'ProcName
。我可以在其他地方使用空格而不是\t
或类似的那样来满足此文件吗?
答案 0 :(得分:5)
首先,Linux中/proc
的文档在Documentation/filesystems/proc.txt
的Linux源代码中提供。如果要使用procfs,这应该是你要考虑的第一个地方。可悲的是,AFAICS没有提到确切的记录格式。
要看的第二个地方是procps
来源(即提供ps
工具的包)。在那里你可以找到:
colon = strchr(S, ':');
if(unlikely(!colon)) break;
if(unlikely(colon[1]!='\t')) break;
这意味着ps
依赖于:\t
。因此,您可以假设所有当前的Linux内核都使用此格式。此外,我怀疑微小的变化(比如用其他东西替换\t
)会被认为是重要的,足以破坏与旧版ps
工具的兼容性。
那就是说,你接受的东西通常更自由。考虑到该文件的特定内容,您可以假定冒号是字段分隔符,并删除其后面的任何空格。如果您使用的是shell脚本,则常规字段分隔就足够了。
最后,我想提几点:
status
文件应该是人类可读的。因此,程序通常更好地读取stat
文件,而不是设计为面向机器的文件。/proc
格式。libprocps
附带的procps
库而不是阅读手工文件。这样,您就可以避免重新发明轮子并直接依赖特定格式。