5

ディレクトリからプロセス情報を取得したいのです/procが、質問は次のとおりです。ファイルの標準形式はあります/proc/PIDか?
たとえば、最初の行にこのproc/PID/statusファイルがあります。Name:'\t'ProcNameこのファイルを他の場所で空白の代わりに、\tまたはそのようなsmthで満たすことができますか?

4

1 に答える 1

6

まず、Linuxでのドキュメントは/proc、のLinuxソースで提供されていますDocumentation/filesystems/proc.txt。これは、procfsを使用する場合に最初に調べる場所です。悲しいことに、AFAICSは正確なレコード形式については言及していません。

2番目に確認する場所procpsは、ソース(つまり、psツールを提供するパッケージ)です。そこにあなたは見つけることができます:

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

つまり、そこにいることにps依存して:\tいるということです。したがって、現在のすべてのLinuxカーネルがこの形式を使用していると想定できます。さらに、マイナーな変更(を他のものに置き換えるなど)が、古いバージョンのツール\tとの互換性を損なうほど重要であると見なされるとは思えません。ps

そうは言っても、あなたは通常、あなたが受け入れるものにおいてより寛大になることができます。そのファイルの特定の内容を考慮すると、コロンがフィールド区切り文字であると想定し、それに続く空白をすべて削除できます。シェルスクリプトを使用している場合は、通常のフィールド分離で十分です。

最後に、いくつかの点を指摘したいと思います。

  1. statusファイルは人間が読める形式であると想定されています。したがって、プログラムは通常、statマシン指向になるように設計されたファイルを読み取る方が適切です。
  2. ここではLinuxのみを検討しています(タグに基づく)。システムが異なれば、フォーマットも少し異なる場合があり/procます。
  3. Cプログラムを作成している場合(シェルタグはエディターによって追加された)、ファイルを手動で読み取る代わりに、libprocps付属のライブラリの使用を検討する必要があります。procpsそうすれば、車輪の再発明や特定のフォーマットに直接依存することを回避できます。
于 2012-11-24T11:13:40.660 に答える