56

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

./monitorscript <pname>

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

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

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

4

9 に答える 9

91

上記の答えはおおむね正しいもので、Mac OSX のさまざまなパラメーターを微調整する必要があっただけです。

ps -A | grep [f]irefox | awk '{print $1}'
于 2012-07-18T17:52:41.380 に答える
55

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

$ pgrep Keychain\ Access
44186
于 2016-02-28T16:38:52.153 に答える
47

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

brew install pidof
pidof <process_name>
于 2015-02-24T10:31:39.430 に答える
7

この解決策は、プロセス名をより厳密に一致させます。

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

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

  • 次のようなコマンドライン引数を無視しますtail -f ~/Dropbox
  • 次のようなディレクトリ内のプロセスを無視します~/Dropbox/foo.sh
  • のような名前のプロセスを無視します~/DropboxUID.sh
于 2014-08-10T14:10:11.727 に答える
6

これは、私が見つけることができる最も短いコマンドです。

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

最初の文字を括弧で囲むと、awk が awk プロセス自体を見つけられなくなります。

于 2013-08-07T08:34:06.043 に答える
2

これを試してください:

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

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

于 2012-07-18T23:59:20.143 に答える
1

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

pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)
于 2012-07-18T17:20:09.367 に答える
-2

TOP を実行し、オプションを使用して、PID 以外の他のメトリックで並べ替えてみませんか? 同様に、CPU/MEM から使用された最高の PID は?

top -o cpu <--- すべてのプロセスを CPU 使用率で並べ替えます

于 2016-02-23T16:05:17.553 に答える