/proc/[pid]/make-if-fail 的含义和用法

/proc/[pid]/make-if-fail 的含义和用法

我目前正在嵌入式 Linux 环境(内核 3.10.0)中进行开发,在挂载procfs系统时我发现所有进程在其/proc/[pid]文件夹中都存在以下文件:

-rw-r--r--   1 root    root      0 Feb   22 09:10 make-it-fail

只是为了测试,我从 shell 启动sleep 360 &并尝试读取/写入catecho文件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
    [...]

奇怪的事情:

  1. 尽管stat声称该文件的大小为 0,但我可以在那里读取和写入一些内容,并检索我写入的内容。
  2. 该进程仍然活跃,在该文件的读写中“幸存”。我实际上期望它......好吧,失败或退出。

我知道这procfs是一个伪文件系统(因此stat结果可能不是“真实的”/误导性的)并且它与内核结构交互,但我觉得我现在在这里遗漏了一些东西。

那么,这个文件的目的和用途是什么?我不记得在其他发行版中看到过它(例如,它不在我用于开发的 Ubuntu 中)

答案1

我正在调查你的一些问题,因为读到这篇文章我开始怀疑将错误注入内核失败是一面旗帜。

其实已经确认阅读了将错误注入内核:

因此,有许多选项可用于将故障集中在内核的特定部分。
其中包括: 任务过滤器:如果该变量设置为正值,则仅当专门标记的进程正在运行时才会注入故障。为了启用此标记,每个进程都有一个新标志(让它失败) 在其 /proc 目录中; 将该值设置为 1 将导致错误注入到该进程中。

归根结底,make-it-fail 是一个布尔标志,标记是否将在相关 PID 中对多个进程进行条件注入操作。因此,像您所做的那样将其值更改为 1 不会产生任何后果。

至于变量/文件名本身,文章还指出必须在打开错误注入功能的情况下编译内核;因此你通常不会在其他 Linux 机器上看到它们。

至于proc存在文件系统不一致的问题,proc是一个虚拟文件系统,将文件名映射到linux内部结构/变量;文件大小自然为 0 字节。

来自 TLDPLinux 文件系统层次结构:/proc

该目录中的文件最显着的特点是,除了 kcore、mtrr 和 self 之外,所有文件的文件大小均为 0。

相关内容