我正在编写一个脚本来监视任何给定进程的CPU和MEM . 为此,我需要将要监视的进程的名称作为命令行参数发送 . 例如 .
./monitorscript <pname>
我需要在脚本中获取进程的pid,以便我可以在里面使用 ps -p <pid> .
ps -p <pid>
如何根据流程名称获取流程的pid?
我知道同名中可能有多个进程 . 我只想从该列表中获取第一个进程 .
这是我能找到的最短的命令:
ps -ax | awk '/[t]he_app_name/{print $1}'
在第一个字母周围放置括号会阻止awk找到awk进程本身 .
上面的答案大多是正确的,只需要对Mac OSX中的不同参数进行一些调整 .
ps -A | grep -m1 firefox | awk '{print $1}'
您可以使用Homebrew安装 pidof :
pidof
brew install pidof pidof <process_name>
您可以使用pgrep命令,如以下示例所示
$ pgrep Keychain\ Access 44186
试试这个:
echo "$(ps -ceo pid=,comm= | awk '/firefox/ { print $1; exit }')"
ps 命令生成这样的输出,第一列中的PID和第二列中的可执行文件名(仅):
ps
bookworm% ps -ceo pid=,comm= 1 launchd 10 kextd 11 UserEventAgent 12 mDNSResponder 13 opendirectoryd 14 notifyd 15 configd
... awk 处理,打印第一列(pid)并在第一次匹配后退出 .
awk
此解决方案更严格地匹配流程名称:
ps -Ac -o pid,comm | awk '/^ *[0-9]+ Dropbox$/ {print $1}'
该解决方案具有以下优点:
它忽略命令行参数,如 tail -f ~/Dropbox
tail -f ~/Dropbox
它忽略目录内的进程,如 ~/Dropbox/foo.sh
~/Dropbox/foo.sh
它会忽略名称为 ~/DropboxUID.sh 的进程
~/DropboxUID.sh
你可以试试这个
pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)
为什么不运行TOP并使用选项按除PID之外的其他指标进行排序?比如,来自CPU / MEM的最高使用PID?
top -o cpu <---按CPU使用率排序所有进程
8 回答
这是我能找到的最短的命令:
在第一个字母周围放置括号会阻止awk找到awk进程本身 .
上面的答案大多是正确的,只需要对Mac OSX中的不同参数进行一些调整 .
您可以使用Homebrew安装
pidof
:您可以使用pgrep命令,如以下示例所示
试试这个:
ps
命令生成这样的输出,第一列中的PID和第二列中的可执行文件名(仅):...
awk
处理,打印第一列(pid)并在第一次匹配后退出 .此解决方案更严格地匹配流程名称:
该解决方案具有以下优点:
它忽略命令行参数,如
tail -f ~/Dropbox
它忽略目录内的进程,如
~/Dropbox/foo.sh
它会忽略名称为
~/DropboxUID.sh
的进程你可以试试这个
为什么不运行TOP并使用选项按除PID之外的其他指标进行排序?比如,来自CPU / MEM的最高使用PID?
top -o cpu <---按CPU使用率排序所有进程