即使没有进程,cd 到 `/proc/xxx` 也可以工作

即使没有进程,cd 到 `/proc/xxx` 也可以工作

今天我发现这个文件夹有些奇怪/proc。有一个 PID (7825),我无法通过 看到它是一个正在运行的进程ps,当我 make 时我也看不到进程 id ls /proc,但我可以使用它看到它ls /proc/7825,也可以 cd 进入它。这里的输出:

# ls /proc

...
dr-xr-xr-x   9 xxxxxxx         xxxxxxx             0 May 16 20:57 7812
dr-xr-xr-x   9 xxxxxxx         xxxxxxx             0 May 16 20:52 7820
dr-xr-xr-x   9 root            root                0 May 16 20:52 7836
dr-xr-xr-x   9 root            root                0 May 16 20:52 786
dr-xr-xr-x   9 xxxxxxx         xxxxxxx             0 May 16 20:57 7923
dr-xr-xr-x   9 xxxxxxx         xxxxxxx             0 May 16 20:52 7924
...
ps aux | grep [7]825

[EMPTY RESULT]
ls /proc/7825
attr    clear_refs  coredump_filter  environ  fdinfo   largest_task  make-it-fail  mem        mountstats  oom_adj        pagemap      root       setgroups  stat    syscall        timerslack_ns  weight
auxv    cmdline     cpuset           exe      gid_map  limits        map_files     mountinfo  net         oom_score      personality  schedstat  smaps      statm   task           uid_map
cgroup  comm        cwd              fd       io       loginuid      maps          mounts     ns          oom_score_adj  projid_map   sessionid  stack      status  time_in_state  wchan

为什么这个 PID 可用ls /proc/7825但没有显示在ps操作系统中ls /proc

这对于我的程序来说非常关键,因为我必须检查(上次运行的)某个 PID 是否仍在运行(检查是否/proc/[LAST_RUN_PID]/exe存在)。如果是这样,我认为之前的运行是“仍在运行”。今天我们遇到了一个问题,/proc/7825/exe即使没有程序运行,该文件仍然存在(几个小时)。

有人可以详细说明为什么/如何发生这种情况吗?

答案1

ps在 Linux 上获取其信息,/proc因此它们的信息不会有真正的不同。即使不正确的 pid/mount 命名空间设置意味着/proc代表的信息不是来自当前 pid 命名空间,ps也会报告相同的错误信息。

在这里,7825 很可能是某个其他进程的线程,您会在 的输出中看到它ps -ALf,其中-L告诉ps我们报告所有线程(轻量级进程),而不仅仅是进程。

相关内容