web-dev-qa-db-ja.com

コマンドライン引数を使用してプロセスのPIDを見つけるにはどうすればよいですか?

私はMacOS Xを使用しています。つまり、(たとえば)pgrep/pkillはありませんが、そのようなものが必要です(macports/finkも使用していません-homebrewが私のUnixパッケージツールです-したがって、それらのパッケージは機能しません)。

特定のパラメータ(基本的には、特定のリモートsshポート転送トンネル)を使用してsshのインスタンスを見つけて強制終了したいと思います。私が使用するコマンドは次のようなものです。

ps aux | grep ssh | grep remote-Host | grep port-forwarding-stmt

ただし、このgrepコマンドが実際に出力に表示されることがあるため、現在のコマンド文字列は記述されたとおりには役に立ちません。

これを行うために使用できるMacOS X用のツールはありますか?

2
Chris R

文字列にgrepを追加しますが、invertオプションを使用してすべてのgrep出力要求を削除します。

ps aux | grep ssh | grep remote-Host | grep port-forwarding-stmt | grep -v grep
3
Matrix Mole

秘訣は、grepをだまして自分自身を見つけられないようにすることです。

... | grep "[s]sh" | ...

ps -a -o pid, command | awk '(/[s]sh/ && /remote-Host/ && /port-forwarding-stmt/){ print $1}'

述べられたアイデアのいくつかを組み合わせます。 -o partは、pidとコマンドラインのみを出力することを指定し、print $1pid部分のみを出力します。 [s]shそれ自体を見つけられないようにします(いいトリックです!)

1
Henno

Awkも使用できます:

ps axuwww | awk '!/grep/ && /ssh/ && /remote-Host/ && /port-forwarding-stmt/'

Ps(1)の「www」引数は、短縮バージョンではなく、完全なコマンドラインを表示するように指示します。

1
Arcege