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

答え2

1つのオプションを使用し、psorを使用してさらにフィルタリングすることは合理的なアプローチです。grepawk

-oオプションを渡しps、フィールドを必要な項目に制限します。ヘッダー行を非表示にするには、各フィールド名の後に等号を使用します。コマンド名が必要ない場合は、改行文字を含めることができるか、またはをcomm含めないでくださいargs。セキュリティに敏感なコンテキストでは、改行文字が含まれている場合にスクリプトが合理的な操作を実行していることを確認してください。たとえば、PIDのみが必要で、特定のグループに属し、特定のTTYで実行されているすべてのプロセスが必要な場合は、次のようにPIDを収集できます。

pid_list=$(ps -t tty3 -o 'pid= gid=' | awk '$2 == 1234 || $2 == "somegroup"')

あなたが考える限り、これはあまりにも多くです。特定のPIDを持つプロセスがあるため、条件は-p $PID必要なすべてのフィルタリングです。そのPIDでプロセスのPPIDを検索し、それを期待値と比較します。psそのPIDを持つプロセスがなければ、何も出力されません。

read pid expected_ppid <"$pidfile"
actual_ppid=$(ps -o ppid= -p "$pid")
if [ "$actual_ppid" = "$expected_ppid" ]; then …

正しい特性を持つプロセスが見つかった場合は、同じプロセスである可能性があります。予想されたプロセスがずっと前に終了し、そのPIDが再利用されたため、無関係なプロセスである可能性があることに注意してください。

答え3

これはシェルソリューションなので、以下を除外する必要はありません。ps

if [[ `ps --pid $PID -oppid=` = $PPID ]]
then
   : still running
else
   : not running
fi

関連情報