Ps
如何列出目錄中執行的所有程序的 PID?
我想列出一個目錄中執行的所有程序。
例如,假設 3 三個程序正在執行:
/home/myname/myapp/process1
/home/myname/myapp/process2
/home/myname/myapp/anotherprocess
我將如何詢問系統:“給我所有正在執行的程序的 PID
/home/myname/myapp
”?我能想到的唯一方法是
ps -eo pid,args | grep -i /home/myname/myapp | awk '{print $1}' | tr '\n' ' '
使用
fuser -m /path/to/folder 2>/dev/null
(從輸出中丟棄stderr
)或檢查可用的案例man fuser
請注意,您的命令不會列出目錄中執行的程序。它列出了在該目錄中(由 shell找到)其程序映像文件的程序,因此在它們的第 0 個命令參數中列出(或者恰好在它們的其他命令參數中提到了該目錄)。這些程序當然不一定在該目錄中執行。我將假設您想要的是您所要求的(假設您確實說過在目錄中執行三遍),而不是您的命令實際執行的操作。
由於您沒有指定作業系統:
FreeBSD/TrueOS 和 OpenBSD
使用
-f
選項fstat
使其按文件系統過濾,使用stat
命令獲取所需目錄的 inode 編號(${directory}
事先在 shell 變數中適當命名),並使用awk
後者作為wd
條目輸出的過濾器fstat
:fstat -f "${目錄}" | awk'{ if ($4 == "wd" && $6 == '"`stat -f %i \"${directory}\"`"' && !x[$3]++) 列印 3 美元; }'
(僅)
fstat
以超級使用者身份執行,以包含其他使用者的程序。Linux
兩種方法:
- 使用該
-d
選項lsof
使其僅選擇cwd
條目,使用stat
命令和一些dc
後處理來獲取所需目錄的 inode 編號和已安裝的設備主要/次要編號(${directory}
事先在 shell 變數中適當命名),並awk
使用後者作為輸出的過濾器lsof
:lsof -d cwd | awk'{ if ($8 == '"`stat --format %i \"${directory}\"`"' \ && $6 == "'"`dc -e \"16doi \`stat --format %D \"${目錄}\"\` 100~ rn[,]Pn\"`"'" \ && !x[$2]++) 列印 2 美元; }'
(僅)
lsof
以超級使用者身份執行,以包含其他使用者的程序。
fuser
在另一個答案中使用。