現在、組み込みLinux環境(カーネル3.10.0)で開発中で、procfs
システムをマウントすると、すべてのプロセスの/proc/[pid]
フォルダに次のファイルがあることがわかりました。
-rw-r--r-- 1 root root 0 Feb 22 09:10 make-it-fail
テストのためにシェルから始めてファイルをsleep 360 &
読み書きしようとしました。結果は次のとおりです。cat
echo
make-if-fail
# stat /proc/[sleep_pid]/make-it-fail
File: /proc/[sleep_pid]/make-it-fail
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
[...]
# cat /proc/[sleep_pid]/make-it-fail
0
# echo "1" > /proc/[sleep_pid]/make-it-fail
# cat /proc/[sleep_pid]/make-it-fail
1
# stat /proc/[sleep_pid]/make-it-fail
File: /proc/[sleep_pid]/make-it-fail
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
[...]
奇妙なもの:
stat
ファイルサイズは0であると主張されますが、そこからいくつかの内容を読み書きすることができ、私が書いた内容を検索することができます。- プロセスはまだアクティブであり、「生き残った」プロセスはファイルを読み書きします。実際、私はそれが…まあ、失敗したりやめようと思った。
私はこれがprocfs
擬似ファイルシステムであり(したがってstat
結果が「本当」であるか誤解を招く可能性があります)、カーネル構造と対話することを知っていますが、今ここに何か欠けているような気がします。
それでは、この文書の目的と用途は何ですか?他のディストリビューションで見たことはありません(開発に使用するUbuntuにはありません)。
答え1
ご質問の一部を調査中でした。この内容を読んで気になり始めました。カーネルへのエラー注入失敗はフラグです。
実は読んだことを確認しました。カーネルへのエラー注入:
したがって、カーネルの特定の部分に欠陥を集中させるオプションがたくさんあります。
これには以下が含まれます。ジョブフィルタ:この変数が正の値に設定されている場合、特別にマークされたプロセスが実行されている場合にのみエラーが注入されます。このフラグを有効にするために、各プロセスに新しいフラグ(失敗しよう)/ procディレクトリにあります。 この値を 1 に設定すると、プロセスにエラーが注入されます。
最終的にmake-it-failは、関連するPIDの複数のプロセスで条件付き注入が発生するかどうかを示すブールフラグです。したがって、以前のように値を1に変更しても結果はありません。
変数/ファイル名自体についても、記事にはエラー注入を有効にした状態でカーネルをコンパイルする必要があるため、通常は他のLinuxシステムでは見ることができないと述べています。
procのファイルシステムの不一致の問題に関して、procはファイル名をLinuxの内部構造/変数にマップする仮想ファイルシステムです。ファイルサイズは当然0バイトです。
TLDPからLinuxファイルシステム層:/ proc
このディレクトリのファイルの最も顕著な特徴は、kcore、mtrr、selfを除くすべてのファイルのファイルサイズが0であることです。