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番目のプロセスがパイプからデータの読み取りを開始するのを待つことをブロックできます。これらの待ち時間はランダムに長くなる可能性がありますが、問題ではありません。プロセスがどの順序で実行されても、最終的にデータは送信され、すべてがうまく機能します。

おすすめ記事