pgrepがsystemd-resolvedを見つけることができないのはなぜですか?

pgrepがsystemd-resolvedを見つけることができないのはなぜですか?

#!/usr/bin/env bash
echo "pgrep not finding systemd-resolved has bitten many times."
if [ -z $(pgrep systemd-resolved) ]; then 
  echo -e "systemd-resolved not found by pgrep, trying another way.\n"; 
  ps aux | egrep -i '(DNS|HOST|DH|RESOLV|systemd-resolved)' | egrep -v 'grep -E'; 
fi;
systemd-resolved not found by pgrep, trying another way:    
systemd+     **914**  0.0  0.0  26196  4048 ?        Ss   Nov12   0:02 /lib/systemd/**systemd-resolved**
rjt        73300  0.0  0.0   9228  2160 pts/2    S+   23:02   0:00 grep -E --color=auto -i (DNS|HOST|DH|RESOLV|systemd-resolved)

私はさまざまな年齢のさまざまなシステムで作業してきました。バックエンドの名前解決システムと名前解決者の対処方法を理解する必要があります。だから私はしばしばpgrepを使ってすべてのDNS関連プロセスを見つけます。

pgrepの文字列の長さ制限だと思いますか?

答え1

説明したようにman pgrep

一致に使用されるプロセス名は、出力に表示される15文字に制限されています/proc/pid/stat-fコマンドライン全体を一致させるには、このオプションを使用します/proc/pid/cmdline

"systemd-resolved"には16文字があるため、この制限に違反します。実行すると、pgrep -f systemd-resolvedプロセスを見つけることができます。

関連情報