「COMMAND」列に基づいて「ps fp」出力をフィルタリングするにはどうすればよいですか?

「COMMAND」列に基づいて「ps fp」出力をフィルタリングするにはどうすればよいですか?

私は持っています

pgrep -U herman | xargs --no-run-if-empty ps fp

COMMANDしかし、検索を通じて列ごとにさらにフィルタリングしたいと思います。sh scriptName.sh Argument1

答え1

pgrepあなたのためにする方が簡単かもしれません。

pgrep -U herman -f "sh scriptName.sh Argument1"

状況がそれよりも複雑な場合は、数値pgrepパスを直接使用して/procを介して表示されるプロセス属性を確認できます(位置pspgrep確認が同じであるため、「厄介ではありません」)。例えば

#!/usr/bin/env zsh
# /bin/bash should work too, but haven't checked.

for candidate in $(pgrep -U herman); do
  # skip any Python process
  grep -q bin/python3 /proc/${candidate}/cmdline || break
  # check whether this has any *.log file as stdin or stdout or stderr
  for fd in /proc/${candidate}/fd/{0,1,2}; do
    grep -q '.*\.log$' ${fd} && echo ${candidate} && break;
  done
done

すべてのプロセス(Pythonを除く)がstd *に接続したファイルを確認する方法です。

関連情報