今天我发现这个文件夹有些奇怪/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
我们报告所有线程(轻量级进程),而不仅仅是进程。