参考文献

参考文献

はなぜ必要ですか?と を一緒にpgrep使用できる場合、 はなぜ必要ですか? コマンドまたは があると奇妙です。psgreppgreplsgrepcurlgrep

しかし、私が気づいた違いは、最初にtmuxセッションを開始すると、

tmux new -s foo

それから

ps aux | grep tmux

tmuxサーバプロセスを見つけることができませんが、

pgrep -l tmux

できます。しかし、 のようにtmux サーバー プロセスを確認できるように フラグを設定できないのはなぜでしょうか。 と の違いはps何でしょうか。greppgreppsgreppgrep

答え1

コマンドには、一般的にはとpsという 2 つのフィールドがあり、この方法で検索します。1 つ目は、NUL で区切られたプログラム引数文字列です。2 つ目は、プログラムの「名前」です。これらは別々に保存され、(さまざまなオペレーティング システムで)argscomm両方実行時にプログラム自体によって変更されることがあります。 などのプログラムはtmux実際にそれを行います。

の出力ps機械で解析できない複数のフィールドにはエンコードされていない空白任意の長さの空白文字が存在するため、フィールドの境界を確実に決定することは不可能である。またフィールド区切り文字。 argsと は、commまさにそのような 2 つのフィールドです。 の出力は、ps人間が判読できる形式のみです。

grep出力が行全体のパターンマッチングである場合ps、そのパターンを特定のフィールドに確実に固定する方法はありません。を除外する役に立つもの、そしてそもそもこの方法で探しているものをすべて排除することによって。

たとえば:

%ps -a -x -e -o sid、通信、引数 |
  grep dbus-デーモン |
  ヘッド-n 4
   25 nosh cyclog 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 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 PATH=/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出力を1つ書くこともできますできる(例えば) で処理する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) print $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--print-address\0407\040--session
%
%システム制御 ps -A -o sid、comm、args、envs、tree |
  awk '{ if ("dbus-daemon"==$2) print $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-02.
  • visNetBSD ライブラリ関数マニュアル。 2017-04-22.
  • シュロミ・ノアック(2009-10-01)。 mysqld が生きているかどうかをテストしない方法。 code.openark.org をご覧ください。
  • グレッグ・ウーリッジ。 「プロセスツリーを解析する際のリスク」プロセス管理グレッグのウィキ。
  • ジョナサン・デ・ボイン・ポラード(2015年)。clearenvnoshガイド. ソフトウェア。
  • ジョナサン・デ・ボイン・ポラード(2015年)。setenvnoshガイド. ソフトウェア。
  • ジョナサン・デ・ボイン・ポラード(2020年)。psnoshガイド. ソフトウェア。
  • ジョナサン・デ・ボイン・ポラード(2020年)。list-process-tablenoshガイド. ソフトウェア。

関連情報