私の答えは、ps
リストで「foobar」を検索するための典型的な答えのバリエーションです。の議論"-A" "ps"
は、よりも移植性が高い"aux"
と思いますが、この変更は答えとは無関係です。典型的な答えは次のようになります。
$ ps -A -ww | grep [f]oobar
代わりに、次のパターンを使用します。
$ ps -A -ww | grep [^]]foobar
主な利点は、[^]]
探しているパターンと静的な文字列を単純に連結するだけなので、このパターンに基づいてスクリプトを記述しやすいことです。文字列の最初の文字を取り除き、それを四角括弧の間に挿入し、それを再び連結する必要はありません。シェルでスクリプトを作成する場合、[^]]
探しているパターンの前に単純に貼り付ける方が簡単です。Bashでの文字列スライスは見苦しいため、私のバリエーションではそれを避けています。このバリエーションは、パターンが先頭の右角かっこなしで一致する行を表示すると言います。角かっこを除外する検索パターンは実際に角かっこをパターンに追加するため、一致することはありません。
したがってpsgrep
、次のように移植可能なコマンドを書くことができます。ここでは、Linux、OS X BSD、その他の違いを考慮します。これにより、から列ヘッダーが追加されps
、よりカスタム化されたps
私のニーズに合った形式をより良くし、余分な、余分な幅をリストするプロセスを表示して、コマンドライン引数のいずれも見逃さないようにします。まあ、ほとんどが見逃されていません。JavaはJavaであるため、可能な限り最悪の方法で動作することが多いため、一部のJavaサービスは、プロセステーブルが追跡する引数の最大許容長を超えて実行されます。これは1024文字だと思います。プロセスの開始に許可されるコマンドローンの長さははるかに長くなりますが、カーネルプロセステーブルは1Kを超える長さを追跡することはありません。コマンドが開始されると、コマンド名と引数リストは不要になります。そのため、プロセステーブルに格納されるのは単なる情報です。
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour
。