web-dev-qa-db-ja.com

Mac OS Xでプロセス名を指定してプロセスのPIDを取得する方法は?

特定のプロセスのCPUとMEMを監視するスクリプトを書いています。そのために、コマンドライン引数として監視するプロセスの名前を送信する必要があります。例えば。

./monitorscript <pname>

内部でps -p <pid>を使用できるように、スクリプトでプロセスのpidを取得する必要があります。

プロセス名を指定してプロセスのPIDを取得するにはどうすればよいですか?

同じ名前で複数のプロセスが存在する可能性があることを理解しています。そのリストから最初のプロセスを取得したいだけです。

37
Pradep

上記の答えはほぼ正しかったので、Mac OSXのさまざまなパラメーターを微調整する必要がありました。

ps -A | grep -m1 firefox | awk '{print $1}'
67
Vijay C

pidofHomebrew でインストールできます:

brew install pidof
pidof <process_name>
32
hgascon

次の例のようにpgrepコマンドを使用できます

$ pgrep Keychain\ Access
44186
31
bergercookie

これは私が見つけることができる最短のコマンドであり、仕事をしています:

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

最初の文字をブラケットで囲むと、awkはawkプロセス自体を見つけられなくなります。

4
phatmann

このソリューションは、プロセス名とより厳密に一致します。

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

このソリューションには次の利点があります。

  • tail -f ~/Dropboxなどのコマンドライン引数を無視します
  • ~/Dropbox/foo.shのようなディレクトリ内のプロセスを無視します
  • ~/DropboxUID.shのような名前のプロセスを無視します
4
stepmuel

これを試してください:

echo "$(ps -ceo pid=,comm= | awk '/firefox/ { print $1; exit }')"

psコマンドは、最初の列にPIDを、2番目の列に実行可能ファイル名(のみ)を含む次のような出力を生成します。

bookworm% ps -ceo pid=,comm=
    1 launchd
   10 kextd
   11 UserEventAgent
   12 mDNSResponder
   13 opendirectoryd
   14 notifyd
   15 configd

... which awkは、最初の列(pid)を出力し、最初の一致後に終了します。

2
Nicholas Riley

これを試すことができます

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