ps auxを使用したプロセスID


9

私はシェルプログラミングの初心者です。端末からプログラム(NetBeansなど)を開始したと仮定すると、

ps aux|grep netbeans

出力を取得します

pre      18775  1.2  0.0  12524  1972 pts/3    S    20:17   0:00 

ここで、18775はプロセスのPIDなどを指定します。

それから私はそれを使ってそれを殺します

kill 18775.

NetBeans UIが消えます。最初のコマンドを使用してpidを取得しようとしても、次のようになります。

pre      19137  0.0  0.0   9136  1068 pts/3    S+   20:19   0:00 grep --color=auto netbeans

プロセスが強制終了された場合、なぜ上記の出力がまだ表示されるのですか?


1
それはあなたにnetbeansプロセスを示していません-それはps auxがパイプされているgrepプロセスを示しています!そのプロセスはgrep netbeansgrep --color=auto netbeans
なので

回答:


15

grepはそれ自体をgrepしています。次のようなものを試してください:

ps aux |grep [n]etbeans

これにより、grepが出力に表示されなくなります


2
これは機能しますが、あまり良くありません。あなたも行うことができますps aux | grep netbeans | grep -v grep。ただし、代わりにpgrepを使用してください。
Martin Ueding、2011年

1
@queueoverflow pgrepは適切ですが、プロセス名とのみ一致します。最初のパターンは、の任意の列と一致できますps。(たとえば、PythonまたはJavaで実行されているものでは、pgrepは正しいものをgrepすることにはなりません。pkill
以下同様

5

ps一緒に使用しないでくださいgrep

むしろ、それを殺すためにkillall netbeanspkill netbeansを使用してください。プロセスIDの場合pgrep netbeans

psとgrepの詳細。


5
それは私が今まで聞いた中で最も役に立たないアドバイスです。ps( "grep"で始まる)の出力でgrepプロセスがどのように見えるかを知っている限り、2つを一緒に使用しても危険はまったくありません。スクリプトでkillを使用しないことについてのアドバイスは理解できますが、それは重要ではありません。
ovangle 2011年

3
そして、pgrepはもっと悪いと思います。なぜなら、「$(pgrep vi *)を殺す」か、そのような驚くほど安全ではないものを求めているからです。
ovangle 2011年

1
これは、また、このページ上で最も役に立たない答えであるようにpgreppkillとこれだけ試合プロセス名に-何が解釈されている(javaの、パイソン、bashの、など...)のみ使用して同じプロセス名の下に、他と区別することができますps
Izkata

3
@Izkata-pgrepおよびpkillに-fを使用すると、コマンドライン全体と一致します。あなたが言及するように、それはインタープリターの下で実行されるものを一致させようとするときに時々役に立ちます。コマンドラインのどこからでもパターンを参照しているものは何でも喜んで殺すので、足元で自分を撃つには良い方法でもあります:)
roadmr

4

それは、後に実行するためにキューに入れられているgrepプロセスのPIDだからですps aux


@ ovangle- まばたき考えたことはありません!:Dありがとう!
P Ramesh 2011年

1
実際にgrepは、実行時にすでに実行さps auxています。ようにps aux動作し、その出力は実行に送られgrep、入力としてインスタンス。シェルがまだ実行されgrepていない場合、それはの出力には表示されませんps
Eliah Kagan 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.