ps出力/パイプライン実行順序

ps出力/パイプライン実行順序

私は走るps aux | grep somethinghere

出力はgrep somethinghere実行中のプロセスとして表示されます。

私の質問はps aux最初に完了してからgrep somethinghere出力を実行してはいけませんか?おそらく完了する必要はないかもしれませんがps(2つの間にパイプがあります)、実行ではなく最初のプロセスとして実行する必要がありますgrep

出力はgrep以前に実行されたことを意味しますps

これはどうですか?ps出力はパイプで接続する必要があるため、最初に実行しないでください。同時に実行しても出力にgrep常に表示されるのはなぜですか?grep時々見えませんかgrep

答え1

あなたは少し見なければなりません。このページ


編集、今あなたが何を求めているのか理解しています。


おそらくこれよりよく説明するのに役立ちます。

コマンドが実行される順序は実際には重要ではなく、保証されません。 Pipe(), fork(), dup() および execve() の難解な詳細は取り除き、シェルは最初にプロセス間でデータが流れるパイプであるパイプを生成し、次にプロセスに接続されたパイプで終わるプロセスを生成します。 。実行中の最初のプロセスは、2番目のプロセスの入力を待つことをブロックするか、2番目のプロセスがパイプからデータの読み取りを開始するのを待つことをブロックできます。これらの待ち時間はランダムに長くなる可能性がありますが、問題ではありません。プロセスがどの順序で実行されても、最終的にデータは送信され、すべてがうまく機能します。

答え2

OPは、「grep somethinghere出力リストからプロセスを削除する方法」を意味すると思います。これを行うには12の方法があります。pssomethinghere

  1. 番号のみが必要な場合に使用できます。pgrep -l somethinghere
  2. ダブルgrep ps aux | grep somethinghere | grep -v grep(よく会うのにあまり好きではない)
  3. 正規表現を作るsomethinghere ps aux | grep [s]omethinghere

関連情報