web-dev-qa-db-ja.com

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が上昇しており、コマンドラインが任意の文字列と一致しているようです。

CentOS6.7とUbuntu12.04の両方でこれを試したところ、同じ結果が得られました。 Macで同様の実験を試みたところ、テストはネガティブに戻りました。謎のプロセスはありませんでした。

何が起きてる?

4
igal

これは、Sudoプロセスを示しています。つまり、PIDは、Sudoの後に置くことで実行しているpgrepコマンドの親であるSudoプロセスのPIDです。 。コマンドライン全体を(-fで)検索すると、文字列(パターン)も元のSudoの一部であるため、Sudoプロセスが出力にポップアップ表示されます。コマンド。

-l-apgrepがサポートしている場合)を使用すると、より良いアイデアが得られます。

テスト:

% Sudo pgrep -af "asdf"
4560 Sudo pgrep -af asdf

% Sudo pgrep -lf "asdf"
4562 Sudo

% pgrep -af "asdf" 
%
5
heemayl

「-f」を使用して検索している文字列は、Sudoの完全なSudoリストにも含まれているため、psコマンドが検出されます。

基本的に、Sudo pgrep -f xyzを実行すると、

PID1 Sudo pgrep -f xyz
PID2 pgrep -f xyz

Pgrepコマンドは両方を検出し、それ自体を無視し、PID1を一致として報告します。

実行するたびに新しいSudoコマンドがあるため、当然PIDは増加します。

4
Stephen Harris