なぜpgrep
必要ですか?ps
andを一緒に使用できる場合はgrep
なぜ必要ですかpgrep
?または、コマンドがあればlsgrep
奇妙ですcurlgrep
。
しかし、私が気づいた1つの違いは、次のようにtmuxセッションを初めて開始したとき
tmux new -s foo
それから
ps aux | grep tmux
tmuxサーバープロセスが見つかりませんが、
pgrep -l tmux
できる。しかし、tmuxサーバープロセスを表示できるps
ようにフラグがないのはなぜですか?これらとそしての違いは何ですか?grep
pgrep
ps
grep
pgrep
ベストアンサー1
コマンドps
には通常、人々がこの方法で検索する2つのフィールド、つまりおよびargs
がありますcomm
。 1つ目は、NULで区切られたプログラムパラメータ文字列です。 2番目はプログラムの「名前」です。これは別々に保存されます(さまざまなオペレーティングシステムで)両方実行時にプログラム自体によって変更されます。このようなプログラムがtmux
まさにその仕事をします。
の出力はps
次のとおりです。マシンで解析できない。複数のフィールドに次のものを含めることができます。エンコードされていないスペースこれにより、フィールド境界を確実に決定することができなくなる。なぜなら、どの長さのスペースも許されないからです。返品フィールド区切り記号。実際、そのような領域は2つargs
ありますcomm
。出力ps
は人間が読むことができます。
したがって、grep
出力がps
行全体と一致するパターンである場合、そのパターンを問題の特定のフィールドに固定する安定した方法はありません。とは別に便利で、最初にこの方法で見つけようとすることができるほとんどすべてを削除します。
いくつかの例:
- BSDで
u
Linuxを選択すると、ユーザー名を含むフィールドがあり、プログラム名を見つけるパターンが一致することがあります。ps
-u
ps
user
grep
- 標準的な問題(例:ps -ef | ps -efの違いは何ですか? grep WDAとps -ef grep [W]DA?「、」プログラム名にふさわしくクリック率がなぜこんなに高いのでしょうか?「、」`ps| grep -v |」、そしてたくさん他の場所)はもちろん、プロセス自体
grep
に渡されるモードです。grep
args
- 環境文字列と一致する場合も発生する可能性があります。これは、環境変数でよく見られる内容を考慮すると、
_
特に胸痛です。
%ps -a -x -e -o sid、comm、args | ps -a -x -e -o sid、comm、args | grep dbusデーモン| ヘッダー -n 4 25 nosh サイクログ dbus-daemon/(nosh) 25 dbus-daemon dbus-daemon --config-file ./system-wide.conf --nofork --address=unix:path=/run/dbus/system_bus_socket 第989章 dbus-daemon --config-file ./per-user.conf --nofork --address=unix:path=/run/user/JdeBP/bus 15107 grep grep dbus デーモン % %Clearenv --keep-path\ setenv WIBBLE tmux\ ps -a -x -e -o sid、comm、コマンド| grep tmux 15107 ps パス =/usr/local/bin:/usr/bin:/bin WIBBLE=tmux ps -a -x -e -o sid,pid,comm,command %
つまり、grep
行を含むテキストファイルを処理するために使用されます。プロセステーブルはテキストファイルではなく、テキストファイルとして処理すると(コマンドを使用して変換ps
)、フィールドに関する情報が失われます。
このタイプの検索を実行する方法は、プロセステーブルを表示する以外の方法を使用することですps
。 Linuxでは、/proc/${PID}/comm
パラメータ文字列、環境文字列などの類似した擬似ファイルを直接表示できます。
あるいは、釣りツールを書くこともできます。一致する必要がある特定のデータプロセステーブルから取得し、そのフィールドでのみパターン処理を実行します。このツールはテキストファイルでは機能しませんが、プロセステーブルでは機能します。あなたはそれを呼び出すことができますpgrep
。
もちろん、タイトな手に次のようなps
結果が出るものを書くことができます。できる(たとえば)プロセスを進めるawk
ためはい正確に識別できるフィールドをvis()
提供するために、スペースをエンコードして機械が読み取ることができます。awk
欠点は比較的量が少ないことです人類- 読むことができますが、仕様に準拠したバージョンとまったく同じではありませんps
。私はその出力をconsole-flat-table-viewer
読み取るために渡します。 ☺
%システム制御 ps -p 740 -o sid,comm,args SIDコマンドコマンド 25 dbus-daemon dbus-daemon\040--config-file\040./system-wide.conf\040--nofork\040'--address=unix:path=/run/dbus/system_bus_socket' % %システム制御ps -A -o sid、comm、args、envs、tree awk '{ if ("dbus-daemon"==$2) $3 印刷 }' dbus-daemon\040--config-file\040./system-wide.conf\040--nofork\040'--address=unix:path=/run/dbus/system_bus_socket' dbus-daemon\040--config-file\040./per-user.conf\040--nofork\040'--address=unix:path=/run/user/JdeBP/bus' /usr/local/bin/dbus-daemon\040--fork\040--print-pid\0405\040--印刷-アドレス\0407\040--セッション % %システム制御ps -A -o sid、comm、args、envs、tree awk '{ if ("dbus-daemon"==$2) $3 印刷}' | 国連万力 dbus-daemon --config-file ./system-wide.conf --nofork '--address=unix:path=/run/dbus/system_bus_socket' dbus-daemon --config-file ./per-user.conf --nofork '--address=unix:path=/run/user/JdeBP/bus' /usr/local/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session %
追加読書
ps
。NetBSD 共通コマンドマニュアル。 2016年12月2日。vis
。NetBSDライブラリ機能マニュアル。 2017年4月22日。- スローミノッチ(2009-10-01)。 mysqldがまだ生きているかどうかをテストしない方法。 code.openark.org.
- グレッグが鳴ります。 「プロセスツリーの解析のリスク」。プロセス管理。グレッグのウィキ。
- ジョナサンデボインポラード(2015)。
clearenv
。スナックガイド。ソフトウェア。 - ジョナサンデボインポラード(2015)。
setenv
。スナックガイド。ソフトウェア。 - ジョナサン・ドボイン・ポラード(2020)。
ps
。スナックガイド。ソフトウェア。 - ジョナサン・ドボイン・ポラード(2020)。
list-process-table
。スナックガイド。ソフトウェア。