簡體   English   中英

如何通過在 Mac OS X 中給出進程名稱來獲取進程的 PID?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM