sudo pgrep -fは、すべての文字列と一致し、増加したpidを返します。

sudo pgrep -fは、すべての文字列と一致し、増加したpidを返します。

関連する問題のデバッグ中に、pgrepが次のようにランダムに見えるコマンドラインモードのPIDを返すことがわかりました。

$ sudo pgrep -f "asdf"
13017

$ sudo pgrep -f ";lkj"
13023

$ sudo pgrep -f "qwer"
13035

$ sudo pgrep -f "poiu"
13046

$ sudo pgrep -f "blahblahblah"
14038

$ sudo pgrep -f "$(pwgen 16 1)"
14219

sudoを持たない同じコマンドは、期待どおりに何も返しません。

$ pgrep -f blahblahblah

私はコマンドが何であるかを確認するためにPIDをpsにパイピングしようとしましたが、うまくいきませんでした。

$ sudo pgrep -f blahblahblah | xargs ps -f -p
UID        PID  PPID  C STIME TTY          TIME CMD

プロセスがあまりにも早く終了したようです。それからpsとgrepを試しましたが、うまくいきませんでした(つまり結果はありません)。

$ sudo ps -e -f | grep [a]sdf

$ sudo ps -e -o command | grep asdf
grep asdf

また、コマンドを十分速く再実行すると、PIDが着実に上昇することがわかりました。

$ for i in $(seq 1 10); do sudo pgrep -f $(pwgen 4 1); done
14072
14075
14078
14081
14084
14087
14090
14093
14096
14099

$ for i in $(seq 1 10); do sudo pgrep -f blahblahblah; done
13071
13073
13075
13077
13079
13081
13083
13085
13087
13089

完全であることを確認するために、findとgrepを使用してprocディレクトリを検索しようとしました。

$ sudo find /proc/ -regex '/proc/[0-9]+/cmdline' -exec grep adsfasdf {} \;
Binary file /proc/14113/cmdline matches
Binary file /proc/14114/cmdline matches

$ sudo find /proc/ -regex '/proc/[0-9]+/cmdline' -exec grep adsfasdf {} \;
Binary file /proc/14735/cmdline matches
Binary file /proc/14736/cmdline matches

PIDが再び上昇するように見え、cmdlineはすべての文字列と一致します。

CentOS 6.7とUbuntu 12.04で試しましたが、同じ結果が得られました。 Macで同様の実験を試みたとき、テスト結果は音声として現れました。神秘的なプロセスはありませんでした。

ここで何が起こっているのでしょうか?

ベストアンサー1

つまり、PIDはsudo実行中のコマンドsudoの親プロセスPIDです。コマンドライン全体を検索すると、文字列(パターン)も生の部分なので、プロセスが出力に表示されます。コマンドの。pgrepsudo-fsudosudo

-land -a(サポートしている場合)を使用すると、pgrepより良いアイデアを得ることができます。

テスト:

% sudo pgrep -af "asdf"
4560 sudo pgrep -af asdf

% sudo pgrep -lf "asdf"
4562 sudo

% pgrep -af "asdf" 
%

おすすめ記事