首页 文章

如何通过在Mac OS X中提供进程名称来获取进程的PID?

提问于
浏览
32

我正在编写一个脚本来监视任何给定进程的CPU和MEM . 为此,我需要将要监视的进程的名称作为命令行参数发送 . 例如 .

./monitorscript <pname>

我需要在脚本中获取进程的pid,以便我可以在里面使用 ps -p <pid> .

如何根据流程名称获取流程的pid?

我知道同名中可能有多个进程 . 我只想从该列表中获取第一个进程 .

8 回答

  • 25

    这是我能找到的最短的命令:

    ps -ax | awk '/[t]he_app_name/{print $1}'
    

    在第一个字母周围放置括号会阻止awk找到awk进程本身 .

  • 1

    上面的答案大多是正确的,只需要对Mac OSX中的不同参数进行一些调整 .

    ps -A | grep -m1 firefox | awk '{print $1}'
    
  • 2

    您可以使用Homebrew安装 pidof

    brew install pidof
    pidof <process_name>
    
  • 4

    您可以使用pgrep命令,如以下示例所示

    $ pgrep Keychain\ Access
    44186
    
  • 23

    试试这个:

    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)并在第一次匹配后退出 .

  • -2

    此解决方案更严格地匹配流程名称:

    ps -Ac -o pid,comm | awk '/^ *[0-9]+ Dropbox$/ {print $1}'
    

    该解决方案具有以下优点:

    • 它忽略命令行参数,如 tail -f ~/Dropbox

    • 它忽略目录内的进程,如 ~/Dropbox/foo.sh

    • 它会忽略名称为 ~/DropboxUID.sh 的进程

  • 2

    你可以试试这个

    pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)
    
  • 61

    为什么不运行TOP并使用选项按除PID之外的其他指标进行排序?比如,来自CPU / MEM的最高使用PID?

    top -o cpu <---按CPU使用率排序所有进程

相关问题