Ubuntuで次のコマンドを試したところ、何も表示されません。
pgrep php5
php5のプロセスIDを返すべきではありません(次のコマンドはこれを実行します)。
ps aux | grep php5
では、これら2つのコマンドの違いは何ですか?
ps aux
には完全なコマンドライン(パスとパラメーター)が含まれますが、pgrepは最初の15文字実行可能ファイルの名前のみを参照しますps aux
は各プロセスの完全なコマンドラインを返しますが、pgrep
は実行可能ファイルの名前のみを参照します。
つまり、greppingps aux
の出力は、プロセスのバイナリのパスまたはパラメーターで発生するものと一致します。 `
ps aux | grep php5
は/usr/share/php5/i-am-a-Perl-script.pl
と一致しますpgrep php5
はしません私のシステムの例を見てください-php5
の代わりにpythonを使用するだけです:
ps aux | grep python
は以下を提供します:izx 2348 0.0 0.7 514928 15644? Sl Jun24 0:00/usr/bin /python /usr/lib/unity-lens-video/unity-lens-video izx 2444 0.0 0.9 547392 18864? Sl Jun24 0:01/usr/bin /python /usr/lib/unity-scope-video-remote/unity-scope-video-remote root 2805 0.0 0.5 95436 12204? S 6月24日0:00/usr/bin /python /usr/lib/system-service/system-service-d izx 6272 0.0 2.9 664400 60320? SNl Jun24 1:16/usr/bin /python / usr/bin/update-manager --no-focus-on-map root 11729 0.0 0.9 180508 19516? S 6月25日0:00 python /usr/lib/software-properties/software-properties-dbus
pgrep python
は11729
のみを返します。これは上記のリストからわかります:ルート11729 0.0 0.9 180508 19516? S 6月25日0:00 python / usr/lib/software-properties/software-properties-dbus
ps aux | grep x
コマンドは、pgrep x
よりも優れた結果を提供します。これは、後者のオプションが欠落しているためです。
単にpgrep
の-f
オプションを使用して、デフォルトの動作であるプロセス名だけでなく、コマンドライン全体を検索します。例:
pgrep -f php5
grep
行を除外したり、パターントリックを使用したりする必要があるps | grep
構造とは異なり、pgrep
は設計によって選択されません。
さらに、パターンがps
USER
列に表示された場合、出力に不要なプロセスが発生します。pgrep
はこの欠陥の影響を受けません。
Pidだけでなく完全な詳細が必要な場合は、次を使用できます。
ps wup $(pgrep -f python)
よりシンプルで信頼性が高い
ps aux | grep python | grep -v grep
または
ps aux | grep p[y]thon
diff <(ps aux|grep x) <(pgrep x) # :)