Macos 如何通过在Mac OS X中提供进程名称来获取进程的PID?
我正在编写一个脚本来监视任何给定进程的CPU和MEM。为此,我需要将要监视的进程的名称作为命令行参数发送。比如说Macos 如何通过在Mac OS X中提供进程名称来获取进程的PID?,macos,bash,shell,process,pid,Macos,Bash,Shell,Process,Pid,我正在编写一个脚本来监视任何给定进程的CPU和MEM。为此,我需要将要监视的进程的名称作为命令行参数发送。比如说 ./monitorscript <pname> /monitorscript 我需要在脚本中获取进程的pid,以便在脚本中使用ps-p 给定进程名称,如何获取进程的pid 我知道可能有多个进程同名。我只想从列表中找出第一个进程 你可以试试这个 pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1) 上
./monitorscript <pname>
/monitorscript
我需要在脚本中获取进程的pid,以便在脚本中使用ps-p
给定进程名称,如何获取进程的pid
我知道可能有多个进程同名。我只想从列表中找出第一个进程 你可以试试这个
pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)
上面的答案基本上是正确的,只是需要对MacOSX中的不同参数进行一些调整
ps -A | grep [f]irefox | awk '{print $1}'
试试这个:
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)并在第一次匹配后退出。这是我能找到的完成此任务的最短命令:
ps -ax | awk '/[t]he_app_name/{print $1}'
将括号括在第一个字母周围会阻止awk查找awk进程本身。此解决方案更严格地匹配进程名称:
ps -Ac -o pid,comm | awk '/^ *[0-9]+ Dropbox$/ {print $1}'
此解决方案具有以下优点:
- 它忽略命令行参数,如
tail-f~/Dropbox
- 它忽略目录中的进程,如
~/Dropbox/foo.sh
- 它忽略名为
~/DropboxUID.sh
pidof
:
brew安装pidof
皮多夫
为什么不运行TOP并使用选项按PID以外的其他指标进行排序?比如,CPU/MEM中使用率最高的PID
top-ocpup您可以像下面的示例一样使用pgrep命令
$ pgrep Keychain\ Access
44186
ps-oppid=$(ps-ax | grep进程名| awk'{print$1}')
打印更改的过程pid,然后打印父pid。然后,您可以终止父进程,也可以在以下命令中使用该parentPID来获取父进程的名称:
ps-p parentPID-o通信=
对我来说,家长是“登录”:\如果
pgrep
可用,那么你可以说pgrep进程\u name
。讨论OSXlight改进的可用性:删除进程路径以避免意外匹配,并匹配所有进程-使用pid=$(ps-ceo…
。在终端中键入echo“$(ps-ceo pid=,comm=| grep-m1 firefox | cut-d'-f1)”时,我没有收到任何响应。我做错什么了吗?grep的结果是'firefox bin 777,3个空格,使用
cut-d'-f3` pid列是正确的,我没有测试这个。我想我会把它放在另一个答案中:-)如果应用程序运行这个返回正确的PID,但是如果特定的应用程序没有运行它返回一个不正确的数字。我使用的是os x 10.9,如果应用程序没有运行,它可能会返回grep进程的PID。看看我的答案。刚刚作为亚洲开发银行的pidof进行了测试,没有显示任何结果。为某个过程工作though@mohacs@stepmuel修复dops-A | grep-m1[f]irefox | awk'{print$1}'
许多进程都与以基本进程的名称作为前缀的助手进程相关联。例如process helper、processd、processScriptRunner等。-m1
将仅通过pid选择所有匹配项中的第一个,这可能不是您想要的ps-A
输出包含pid、tty、time和cmd列。cmd包含执行进程时使用的完整命令。使用-c
标志将cmd列输出减少为仅流程名称。在grep搜索字符串中添加一个行尾锚点,以从输出中消除helper进程ps-Ac | grep-m1'process$'| awk'{print$1}'
。最不花哨;最有用。这是一个很好的pidof Downvote源代码,因为使用了brew
意味着macOS,其中pgrep
存在于macOS上,基本上不使用第三方工具就提供相同的功能。这非常有用!非常感谢。工作得很好。如果要终止进程,请记住pgrep
的兄弟pkill
man pgrep
了解更多信息。从这个答案():“通过在字母周围加括号,在字符串周围加引号,您可以搜索正则表达式,它说:查找字符“f”,后跟“nord”。但是由于您在模式中加括号,“f”现在后跟“]”,因此grep不会出现在结果列表中。非常聪明!”。谢谢你的解释。这不是问题的重点。
$ pgrep Keychain\ Access
44186