psは、複数の条件(AND)に一致するプロセスのみを表示します。

psは、複数の条件(AND)に一致するプロセスのみを表示します。

psマニュアルページによると:

以下に説明されている場合を除き、プロセス選択オプションが追加されます。デフォルトの選択を解除し、選択したプロセスを表示するプロセスセットに追加します。したがって、指定された選択基準を満たす場合、プロセスが表示されます。

これは一致が「AND」ではなく「OR」であることを意味すると思います。

私はディレクトリ(mkdir mutex)を作成し、そのディレクトリ内のファイルにPPIDとPID情報を書き込む独自のロックスクリプトを開発しています。スクリプトの機能の1つは、すべてのロックファイルを繰り返し、$ PPIDと$ PIDを抽出して古いロックファイルをクリーンアップすることです。次に、PIDが$ PIDで、PPIDが$ PPIDのプロセスがまだ実行されていることを確認します。

しかし、psますます多くなります。みんなPPID $PPID で処理すると、PID $PID も取得されます。pid $PIDとppid $PPIDを持つプロセスだけを表示したいです。

ここではこれが直感的に有用であることを知っていますが、grepこれを行うための「より安価な」方法はありますか?他のプロセス関連ユーティリティですか?


procps-3.2.7-16.el5

ベストアンサー1

ちょうど確認してみると、CentOS 6.6にはpgrepこのオプションがないようで、-F該当はありません。この回答は他の状況で役に立つ可能性があるため、ここに残しておきます。


pgrepおそらくあなたが望むもの:

-P, --parent ppid,...
      Only match processes whose parent process ID is listed.
-F, --pidfile file
      Read  PID's  from  file.  This option is perhaps more useful for
      pkill than pgrep.

ファイルのPIDと一致するようにPIDをフィルタリングしているようpgrepです。-F

$ pgrep libvirtd
1343
18471
$ pgrep -F /var/run/libvirtd.pid -P 1
1343
$ echo -n 18471 > other-libvirtd.pid
$ pgrep -F other-libvirtd.pid -P 1
$ pgrep -F other-libvirtd.pid
18471

おすすめ記事