我正在编写一个脚本来监视任何给定进程的 CPU 和 MEM。为此,我需要将要监视的进程的名称作为命令行参数发送。例如。
./monitorscript <pname>
我需要在脚本中获取进程的 pid,以便我可以使用ps -p <pid>
内部。
给定进程名称,如何获取进程的 pid?
我了解可能有多个同名进程。我只想从该列表中删除第一个进程。
上面的答案大部分是正确的,只是需要对 Mac OSX 中的不同参数进行一些调整。
ps -A | grep [f]irefox | awk '{print $1}'
您可以使用 pgrep 命令,如下例所示
$ pgrep Keychain\ Access
44186
您可以pidof
使用Homebrew安装:
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使用率对所有进程进行排序