特定のプロセスが特定のユーザーとして実行されているかどうかを確認したいのですが、そのためには次のようにします。
ps --no-headers -C command -o user | grep user
これはかなり便利ですが、引数を印刷したい場合、少し見苦しくなります (ユーザー名の grep に干渉する可能性があります)。
ps --no-headers -C command -o user,pid,comm | egrep \^user
ユーザを最初の列や最後の列にしたくない場合は、さらに面倒になります。PS で -C および -U オプションを次のように指定できれば、もっとすっきりします。
ps --no-headers -C command -U user -o pid
ただし、2 つの句が AND ではなく OR として機能するため、これは機能しません。私が見逃している 'ps' の機能があるのでしょうか、それとも別の便利なワンライナーを使用できるのでしょうか。よろしくお願いします。
答え1
pgrep
さまざまな条件をサポートします:
pgrep -x -u "user" "command"
引数も一致させるには を-x
置き換え、コマンド ラインを表示するには を追加します。-f
-l
コマンドラインを直接読み取ることもできます(null 区切り):/proc/PID/cmdline
if pids=$(pgrep -x -u "user" "command"); then
for pid in $pids; do
tr "\0" " " < /proc/$pid/cmdline; echo
done
fi