特定のプロセスのCPUとMEMを監視するスクリプトを書いています。そのために、コマンドライン引数として監視するプロセスの名前を送信する必要があります。例えば。
./monitorscript <pname>
内部でps -p <pid>
を使用できるように、スクリプトでプロセスのpidを取得する必要があります。
プロセス名を指定してプロセスのPIDを取得するにはどうすればよいですか?
同じ名前で複数のプロセスが存在する可能性があることを理解しています。そのリストから最初のプロセスを取得したいだけです。
上記の答えはほぼ正しかったので、Mac OSXのさまざまなパラメーターを微調整する必要がありました。
ps -A | grep -m1 firefox | awk '{print $1}'
pidof
は Homebrew でインストールできます:
brew install pidof
pidof <process_name>
次の例のようにpgrepコマンドを使用できます
$ pgrep Keychain\ Access
44186
これは私が見つけることができる最短のコマンドであり、仕事をしています:
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
のような名前のプロセスを無視しますこれを試してください:
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)を出力し、最初の一致後に終了します。
これを試すことができます
pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)