linux pipeline / tee prozessablauf

563
vivienlwt

Ich denke, für den Linux-Befehl wird die Pipeline: $ command1 | command2 | command3 mit der Reihenfolge Befehl1 -> Befehl2 -> Befehl3 ausgeführt.

Aber was ist mit dem Abschlag: $ command1 | tee >(command2) >(command3)

Da das command2und command3die gleiche Eingabe haben, lautet meine Frage, wird ausgeführt command2und command3parallel ausgeführt (Multithread?) Oder in der Reihenfolge 2-> 3?

Vielen Dank.

1

2 Antworten auf die Frage

2
David Schwartz

Sie werden parallel ausgeführt, wenn sie dazu in der Lage sind. Der teeBefehl führt die Eingabe zu beiden Befehlen, sobald er sie erhält. Dadurch werden sie "betriebsbereit", wenn sie bei der Eingabe blockiert wurden, und das Betriebssystem plant sie auf den verfügbaren Kernen ein. Dies ist kein Multithreading, da dies innerhalb eines Prozesses erfolgt. Dies ist ein Multiprozess-Vorgang.

0
Emery Lapinski

Versuchen Sie, diesen Befehl auszuführen (Strg-C nach einiger Zeit):

(od -x /dev/urandom | tee >(sed 's/^/1 /') >(sed 's/^/2 /')) > /tmp/output 

/ tmp / output wird verschachtelt und überschrieben, wenn jeder Prozess die Möglichkeit hat, ausgeführt zu werden.

Auch wenn Sie "mit Sequenz ausführen" sagen, ist das falsch. Ich denke, DOS verwendete man, um Pipelines mit temporären Dateien zu simulieren, aber nicht mit Unix.

(Ich habe die Syntax> () noch nie gesehen. Lernen Sie jeden Tag etwas Neues!)