追加読書

追加読書

なぜpgrep必要ですか?psandを一緒に使用できる場合はgrepなぜ必要ですかpgrep?または、コマンドがあればlsgrep奇妙ですcurlgrep

しかし、私が気づいた1つの違いは、次のようにtmuxセッションを初めて開始したとき

tmux new -s foo

それから

ps aux | grep tmux

tmuxサーバープロセスが見つかりませんが、

pgrep -l tmux

できる。しかし、tmuxサーバープロセスを表示できるpsようにフラグがないのはなぜですか?これらとそしての違いは何ですか?greppgreppsgreppgrep

ベストアンサー1

コマンドpsには通常、人々がこの方法で検索する2つのフィールド、つまりおよびargsがありますcomm。 1つ目は、NULで区切られたプログラムパラメータ文字列です。 2番目はプログラムの「名前」です。これは別々に保存されます(さまざまなオペレーティングシステムで)両方実行時にプログラム自体によって変更されます。このようなプログラムがtmuxまさにその仕事をします。

の出力はps次のとおりです。マシンで解析できない。複数のフィールドに次のものを含めることができます。エンコードされていないスペースこれにより、フィールド境界を確実に決定することができなくなる。なぜなら、どの長さのスペースも許されないからです。返品フィールド区切り記号。実際、そのような領域は2つargsありますcomm。出力psは人間が読むことができます。

したがって、grep出力がps行全体と一致するパターンである場合、そのパターンを問題の特定のフィールドに固定する安定した方法はありません。とは別に便利で、最初にこの方法で見つけようとすることができるほとんどすべてを削除します。

いくつかの例:

%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
%

追加読書

  • psNetBSD 共通コマンドマニュアル。 2016年12月2日。
  • visNetBSDライブラリ機能マニュアル。 2017年4月22日。
  • スローミノッチ(2009-10-01)。 mysqldがまだ生きているかどうかをテストしない方法。 code.openark.org.
  • グレッグが鳴ります。 「プロセスツリーの解析のリスク」プロセス管理。グレッグのウィキ。
  • ジョナサンデボインポラード(2015)。clearenvスナックガイド。ソフトウェア。
  • ジョナサンデボインポラード(2015)。setenvスナックガイド。ソフトウェア。
  • ジョナサン・ドボイン・ポラード(2020)。psスナックガイド。ソフトウェア。
  • ジョナサン・ドボイン・ポラード(2020)。list-process-tableスナックガイド。ソフトウェア。

おすすめ記事