Linux procfsでは、/proc/<pid>/stat
2番目の引数として括弧内にプロセス名が含まれています。私が知っている限り(実験を通して)この問題を回避する方法はありません。たとえば、次のことができました。
$ gcc test.c -o 'hello) (world'
...
$ cat /proc/9115/stat
9115 (hello) (world) S 8282 9115 ...
(gcc test.c -o 'name) S 42 23'
プロセスが誤ってまたは意図的にフィールドを生成することを許可する可能性があり、これは素朴なパーサーを誤解する可能性があります。)
次のいずれかのフィールドを「インポートする必要がある」ため、そのフィールドをスキップする適切な方法が必要です。私はこの行を解析する信頼できる方法を見つけるために長い間検索しましたが、正式な質問や例を見つけることができませんでした。
しかし、私が知っている限り、)
これはどの分野でも機能しません。正しいしたがって、一番右のフィールドを見つけるために右から左にスキャンすると、)
2番目のフィールドを正しく区切る必要があります。そうですか?これは私に少し不安定なようです()
後で新しいフィールドで許可した場合はどうなりますか?)。私が見落としているこのファイルを解析するより良い方法はありますか?
ベストアンサー1
形式は/proc/<pid>/stat
次のように記録されます。proc(5)
マンページ。
そこできない(...)
型があいまいになるため、後で追加できない別のフィールドです。これは簡単に見ることができます。
ファイル形式を指定するためのカーネルコードは/proc/<pid>/stat
次の場所にあります。fs/proc/array.c。
OPはどの言語が使用されているかを教えてくれません。 Perlでは、次のように使用できます。
my @s = readfile("/proc/$pid/stat") =~ /(?<=\().*(?=\))|[^\s()]+/gs;
注s
:「コマンド」フィールドには改行文字も含めることができます。