1. 概要
システムで実行されている特定のプロセスを見つけたい場合があります。 このための最も一般的な解決策は、psとgrepの組み合わせを使用することです。
この短いチュートリアルでは、実行中のプロセスの検索を絞り込む方法について説明します。 使用されるgrepステートメントが独自の検索結果にも表示される一般的な問題を解決する方法を説明します。
2. プロセスを見つける
2.1. すべてのプロセスの一覧表示
まず、マシンで実行されているプロセスを一覧表示するから始めましょう。 まず、新しいターミナルを開いて、viセッションを開始しましょう。
% vi
次に、2番目の端末を使用して、 ps コマンドを使用して、現在のプロセスのリストを確認します。
% ps
出力は次のとおりです。
PID TTY TIME CMD
2584 ttys000 0:00.07 -zsh
2589 ttys001 0:00.03 -zsh
2592 ttys001 0:00.07 vi
プロセスの数によっては、psの出力が長すぎて役に立たない場合があります。 多くの場合、検索を絞り込む必要があります。
2.2. 特定のプロセスを探す
特定のプロセスを探すために、grepコマンドを追加して結果を絞り込むことができます。 例を続けて、マシンで実行されている vi インスタンスを見つけるために、次を実行してみましょう。
% ps | grep vi
それは私たちに与えます:
3886 ttys000 0:00.00 grep vi
2592 ttys001 0:00.07 vi
コマンドの出力には、上からのviセッションが含まれます。 ただし、には、フィルターとして使用したgrepプロセスも含まれているため、あまり役に立ちません。
次に、結果からgrepを削除するいくつかの方法を見てみましょう。
3. grepを除く
3.1. grepをgrepで削除する
ps出力からgrep行を除外する1つの方法は、-vオプションで追加のgrepを使用して検索を反転することです。
% ps | grep vi | grep -v grep
これは以下を出力します:
2592 ttys001 0:00.07 vi
この場合、 -v オプションを使用すると、 grep vi の結果から、文字列“grep”を含む行を除くすべてが許可されます。 これは機能しますが、追加のプロセスが必要であり、入力に時間がかかります。
3.2. grep自体を除外するgrep式を作成します
grep ステートメントを出力から除外する別の方法は、コマンド内で正規表現を使用することです。
% ps | grep "[v]i"
これは、viプロセスのみを検出します。
2592 ttys001 0:00.07 vi
これが機能するのは、grepが二重引用符で囲まれたステートメントを正規表現として解釈するためです。 角かっこは、文字「v」の後に文字列「i」が続く正規表現ロジックに解析されます。
ただし、 psの出力に表示されるこのgrepのコマンドラインには、正規表現と一致しない角かっこが含まれています。 言い換えると、 grep vi には、 grep が探している文字列“ vi” が含まれていますが、 grep“ [v] i” 文字列“ vi”自体は含まれていません。
4. 結論
この記事では、プロセス名で検索を絞り込むためのいくつかのツールについて説明しました。
最初に、 ps を使用してプロセスを検索する方法と、grepを使用して検索を絞り込む方法を確認しました。 次に、grepコマンドを結果から除外するいくつかの方法を検討しました。