
ps -Af コマンドを使用して、リモートで使用しているマシン上の emacs プロセスの数を数える必要があります。どこから始めればよいのでしょうか?
答え1
ps -Af
最善のアプローチではありません。
このf
オプションは不要であり、emacs 以外のプロセスが emacs またはそれを含む文字列をパラメータの 1 つとして使用する場合、(ありそうもないが) emacs という名前のユーザーの場合はもちろん、誤検知を引き起こす可能性があります。
より簡単なコマンドを使用することをお勧めします:
pgrep emacs | wc -l
答え2
できるよps -C emacs --no-heading | wc -l
ps -C command
コマンド名による出力プロセス
編集:ps --help
とても興味深い
答え3
Hennes が言ったように、" ps -AF | grep emacs | wc -l
" を使用してこれを行うことができます。ただし、独自のコマンドもそこに含まれます。このコマンドを削除するには、" grep -v
" (または--inverted-match
) を使用して、カウントしたくないコマンドをフィルターします。次のようになります。ps -AF | grep emacs | grep -v grep | wc -l
答え4
第一原則から始めましょう。
まず、使用を要求されたコマンドが具体的に何を行うのか、指定されたオプション ( -Af
) がどのように機能するのかを確認します。これを行うには、次をお読みくださいman ps
。
-A すべてのプロセスを選択します。
-f 完全形式のリストを実行します。このオプションは、他の多くの UNIX スタイルのオプションと組み合わせて、追加の列を追加できます。
したがって、開始点は、ユーザーに対して実行されているすべてのプロセスの出力が完全な形式でリストされた状態になります。処理を実行する前に、コマンドを実行して完全な出力を確認します。
ps -Af
プロセスをカウントするにはemacs
、出力をフィルタリング ツールにパイプして、出力を処理したり、それぞれの一致をカウントしたりする必要があります。はgrep
良いオプションですが、効率性とシンプルさのために、私は以下を使用しますawk
。
ps -Af | awk '/emacs/ && !/awk/ { a++ } END { print a }'
これはパターン を検索し/emacs/
、検索自体のパターン を除外し、!/awk/
一致を増分して{ a++ }
合計 を出力します{ print a }
。
これには 1 つのパイプのみが必要であり、カウントで検索プロセスを返さない問題をエレガントに処理します。