Proc

cd into /proc/xxx 即使沒有程序也可以工作

  • May 17, 2021

今天我發現這個/proc文件夾有些奇怪。有一個 PID (7825),我無法通過 將其視為正在執行的程序ps,我在製作時也看不到程序 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但未顯示在psos中ls /proc

這對我的程序非常重要,因為我必須檢查某個 PID(上一次執行的)是否仍在執行(檢查是否/proc/[LAST_RUN_PID]/exe存在)。如果是這樣,我認為之前的執行是“仍在執行”。/proc/7825/exe今天我們遇到了一個問題,即使沒有程序執行,文件仍然存在(幾個小時)。

有人可以詳細說明為什麼/如何發生這種情況嗎?

ps在 Linux 上獲取其資訊,/proc因此它們的資訊不會真正不同。即使不正確的 pid/mount 命名空間設置意味著/proc表示的資訊不是來自目前的 pid 命名空間,ps也會報告相同的錯誤資訊。

在這裡,7825 很可能是某個其他程序的執行緒,您會在 的輸出中看到它ps -ALf,其中-L告訴ps報告所有執行緒(輕量級程序),而不僅僅是程序。

引用自:https://unix.stackexchange.com/questions/650018