Ubuntu 20.04で「pgrep firefox」が機能しない理由

Ubuntu 20.04で「pgrep firefox」が機能しない理由

タイトルが示すように、Ubuntu 20.04で次のコマンドを実行します.

pgrep firefox

...結果は返されませんでした。

同時に、次のコマンドを実行します。

ps aux |grep firefox

... 6つの結果を返し、そのうち5つは一致する必要がありますpgrep firefoxpgrepUbuntuの元のコマンドにはどのような問題がありますか?

ubuntu     81646  1.9  7.9 3063696 300208 ?      Sl   13:12   0:29 /usr/lib/firefox/firefox -new-window
ubuntu     81891  0.2  3.8 2473448 144796 ?      Sl   13:12   0:03 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 222536 -parentBuildID 20200720193547 -appdir /usr/lib/firefox/browser 81646 true tab
ubuntu     82020  0.1  3.7 2438972 141396 ?      Sl   13:12   0:02 /usr/lib/firefox/firefox -contentproc -childID 3 -isForBrowser -prefsLen 897 -prefMapSize 222536 -parentBuildID 20200720193547 -appdir /usr/lib/firefox/browser 81646 true tab
ubuntu     82051  0.0  2.8 2401248 107520 ?      Sl   13:12   0:01 /usr/lib/firefox/firefox -contentproc -childID 4 -isForBrowser -prefsLen 6935 -prefMapSize 222536 -parentBuildID 20200720193547 -appdir /usr/lib/firefox/browser 81646 true tab
ubuntu     83658  0.0  2.0 2387704 78496 ?       Sl   13:12   0:00 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -prefsLen 10362 -prefMapSize 222536 -parentBuildID 20200720193547 -appdir /usr/lib/firefox/browser 81646 true tab
ubuntu     90700  0.0  0.0  17664   664 pts/0    S+   13:37   0:00 grep --color=auto firefox

同じコマンドを実行すると、Ubuntu 18.04とmacOSで正常に動作します。

ベストアンサー1

pgreppsなしで報告されたプロセス名と一致し、in-fや非標準pgrep -fなどのパラメータのリストと一致します。ps -fps aux

firefoxスレッド名を変更して、各スレッドが実行するアクションを識別します。

試してみてください(デフォルトと仮定$IFS):

ps -L -o comm= -p $(pgrep -wf firefox)

どのリスト名前パラメーターのリストを含むプロセス内のすべてのスレッドには、firefox次のような内容がたくさん表示されます。

MainThread
gmain
gdbus
Gecko_IOThread
Timer
Netlink Monitor
Socket Thread
Permission
JS Watchdog
JS Helper
[...]

そのため、プロセス/スレッド名の代わりに引数firefoxリスト(対応するスレッドまたは親スレッドが実行した最後のコマンドの引数リスト)で一致pgrep -f firefox(すべてのスレッドを一覧表示するには追加)できます。-wまたは、pgrep -f '^[^ ]*firefox'引数リストの最初の単語のみを一致させます(pgrepinのように一致する前に、引数をスペースで連結してくださいps -f)。

いずれにせよ、すべてのプロセスはプロセス名またはパラメータリストを必要に応じて設定または変更できるため、この方法でプロセスを見つけることは決して簡単ではありません。

/usr/lib/firefox/firefox現在実行可能ファイルを実行しているプロセスと一致させるには、Linuxで次のものを使用しますzsh

print -rC1 /proc/<1->/exe(Ne['[[ $REPLY -ef /usr/lib/firefox/firefox ]]']:h:t)

またはスレッドの場合:

print -rC1 /proc/<1->/task/*/exe(Ne['[[ $REPLY -ef /usr/lib/firefox/firefox ]]']:h:t)

(スーパーユーザー権限がないと、自分のように実行されていないプロセスに関する情報を取得できない可能性があります。)

または少し移植性に優れている可能性がありますlsof

lsof -Fd /usr/lib/firefox/firefox | sed '/^p/h;/^ftxt/!d;g;s/^p//'

またはスレッドの場合:

lsof -K -FKd /usr/lib/firefox/firefox | sed '/^K/h;/^ftxt/!d;g;s/^K//'

1プロセス名の長さは通常制限されています(Linuxの場合は15バイト)、OSおよびOSのバージョンによってはシステムがスキャン用のすべての引数リストを簡単に提供できるわけではありません。

おすすめ記事