[英]How to get the PID of a process by giving the process name in Mac OS X ?
我正在編寫一個腳本來監視任何給定進程的 CPU 和 MEM。 為此,我需要將要監視的進程的名稱作為命令行參數發送。 例如。
./monitorscript <pname>
我需要在腳本中獲取進程的pid,以便我可以在里面使用ps -p <pid>
。
給定進程名稱,如何獲取進程的 pid?
我知道可能有多個同名的進程。 我只想從該列表中取出第一個進程。
上面的答案大部分是正確的,只需要對 Mac OSX 中的不同參數進行一些調整。
ps -A | grep [f]irefox | awk '{print $1}'
您可以使用 pgrep 命令,如下例所示
$ pgrep Keychain\ Access
44186
您可以使用Homebrew安裝pidof
:
brew install pidof
pidof <process_name>
此解決方案更嚴格地匹配進程名稱:
ps -Ac -o pid,comm | awk '/^ *[0-9]+ Dropbox$/ {print $1}'
該解決方案具有以下優點:
tail -f ~/Dropbox
這樣的命令行參數~/Dropbox/foo.sh
~/DropboxUID.sh
這是我能找到的最短的命令:
ps -ax | awk '/[t]he_app_name/{print $1}'
將括號放在第一個字母周圍會阻止 awk 找到 awk 進程本身。
試試這個:
echo "$(ps -ceo pid=,comm= | awk '/firefox/ { print $1; exit }')"
ps
命令產生這樣的輸出,第一列是 PID,第二列是可執行文件名(僅):
bookworm% ps -ceo pid=,comm=
1 launchd
10 kextd
11 UserEventAgent
12 mDNSResponder
13 opendirectoryd
14 notifyd
15 configd
... awk
處理、打印第一列 (pid) 並在第一次匹配后退出。
你可以試試這個
pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)
ps -o ppid=$(ps -ax | grep nameOfProcess | awk '{print $1}')
打印出不斷變化的進程 pid,然后是父 PID。 然后您可以終止父進程,或者您可以在以下命令中使用該 parentPID 來獲取父進程的名稱:
ps -p parentPID -o comm=
對我來說,父母是“登錄”:\\
為什么不運行 TOP 並使用選項按除 PID 之外的其他指標進行排序? 比如,來自 CPU/MEM 的最高使用 PID?
top -o cpu <---按 CPU 使用率對所有進程進行排序
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.