【问题标题】:ENOENT(No such file or directory) error occur when I try to open proc file (Ubuntu)当我尝试打开 proc 文件时出现 ENOENT(没有这样的文件或目录)错误(Ubuntu)
【发布时间】:2022-08-13 22:20:08
【问题描述】:

我正在尝试打开并读取所有 proc/[pid]/stat 文件的内容。

但我得到了ENOENT当 pid >= 10961 时,打开函数出错。

从 proc 手册页我发现了这个:

此外,如果一个进程变成了一个僵尸进程(一个已被其父进程通过退出调用终止但未被等待调用挂起的进程),其大部分关联的 /proc 文件将从目录结构中消失。通常,稍后尝试打开或读取或写入在进程终止之前打开的文件会引发 ENOENT 消息。

但我仍然可以通过出现的路径使用cat 命令查看文件内容ENOENT.

这令人困惑。这是僵尸进程吗?为什么我打不开?

代码

void    get_stat(char *path)
{
    int     fd;
    char    *res;

    printf(\"path : %s\\n\", path);
    fd = open(path, O_RDONLY);
    if (fd < 0)
    {
        perror(\"open error\");
        exit(EXIT_FAILURE);
    }
    res = read_file(fd);
}

输出

... worked fine before 10961 ...

path : /proc/6215/stat
path : /proc/6354/stat
path : /proc/10961/stat
open error: No such file or directory
path : /proc/12049/stat
open error: No such file or directory
path : /proc/12127/stat
open error: No such file or directory
path : /proc/12168/stat
open error: No such file or directory
path : /proc/12169/stat
open error: No such file or directory
path : /proc/12171/stat
open error: No such file or directory
path : /proc/12230/stat
open error: No such file or directory
path : /proc/12238/stat
open error: No such file or directory
path : /proc/13185/stat
open error: No such file or directory
path : /proc/13284/stat
open error: No such file or directory
path : /proc/13285/stat
open error: No such file or directory
path : /proc/13466/stat
open error: No such file or directory
path : /proc/13522/stat
open error: No such file or directory
path : /proc/13523/stat
open error: No such file or directory
path : /proc/13532/stat
open error: No such file or directory
path : /proc/13579/stat
open error: No such file or directory
path : /proc/13580/stat
open error: No such file or directory
path : /proc/13589/stat
open error: No such file or directory
path : /proc/13636/stat
open error: No such file or directory
path : /proc/13637/stat
open error: No such file or directory
path : /proc/13726/stat
open error: No such file or directory
path : /proc/14416/stat
open error: No such file or directory
path : /proc/15059/stat
open error: No such file or directory
path : /proc/15153/stat
open error: No such file or directory
path : /proc/15255/stat
open error: No such file or directory
path : /proc/15571/stat
open error: No such file or directory
path : /proc/15573/stat
open error: No such file or directory
path : /proc/15603/stat
open error: No such file or directory
path : /proc/15697/stat
open error: No such file or directory
path : /proc/15744/stat
open error: No such file or directory
path : /proc/15771/stat
open error: No such file or directory
path : /proc/15790/stat
open error: No such file or directory
  • 您是否以 root 身份运行代码?
  • 如果您的代码无法打开文件,则您的代码将退出并出现错误,但提供的示例输出似乎没有...

标签: c linux


【解决方案1】:

您首先需要检查您是否以超级用户访问权限运行以访问所有进程。但是如果你运行这个问题,你会得到EPERM我猜的错误。
无论如何,我们不能可靠地访问所有文件/proc/因为进程在系统生命周期中出现和消失。即使是您启动的程序,也会在/proc并在完成后使其消失...
对于大于某个值的 pid 会出现错误的原因在于任何新运行的进程都会获得递增的 pid 值。回滚到 0 之前的最大值在/proc/sys/kernel/pid_max.而当前最后使用的 pid 号是/proc/sys/kernel/ns_last_pid.此外,低 pid 值通常是长时间运行的进程......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2019-01-26
    • 2021-06-08
    • 2021-12-09
    • 2019-06-24
    • 2016-07-05
    • 2013-02-04
    相关资源
    最近更新 更多