#!/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
プロセスを見つけることができます。