Die Pipeline funktioniert folgendermaßen: Sie führt zuerst den ersten Befehl und dann in Ihrem Fall den zweiten Befehl aus.
Das heißt, lassen Sie uns A|B
den Befehl geben. Dann ist es ungewiss, ob A
oder ob B
erst begonnen wird. Sie starten möglicherweise genau zur gleichen Zeit, wenn mehrere CPUs vorhanden sind. Eine Pipe kann eine undefinierte, aber begrenzte Datenmenge enthalten.
Wenn B versucht, aus der Pipe zu lesen, aber keine Daten verfügbar sind, B
wird gewartet, bis die Daten eingehen. Wenn Sie B
von B
einer Festplatte gelesen haben , besteht möglicherweise dasselbe Problem und Sie müssen warten, bis der Lesevorgang für die Festplatte abgeschlossen ist . Eine nähere Analogie wäre das Lesen von einer Tastatur. Dort B
müsste man warten, bis ein Benutzer eingibt. In all diesen Fällen hat B eine "Lese" -Operation gestartet und muss warten, bis sie beendet ist. Wenn B
jedoch ein Befehl so ist, dass er nur eine Teilausgabe benötigt, wird dieser A
nach einem bestimmten Punkt, an dem der B
Eingangspegel erreicht ist A
, von SIGPIPE beendet
Wenn A
versucht wird, in die Pipe zu schreiben, und die Pipe voll ist, A
muss abgewartet werden, bis etwas Platz in der Pipe frei wird. A
könnte das gleiche Problem haben, wenn es in ein Terminal schreibt. Ein Terminal verfügt über eine Flusskontrolle und kann das Datentempo verringern. In jedem Fall hat to A
eine "Schreib" -Operation gestartet und wartet, bis die Schreiboperation beendet ist.
A
und B
verhalten sich wie Co-Prozesse, obwohl nicht alle Co-Prozesse mit einer Pipe kommunizieren. Keiner hat die volle Kontrolle über den anderen.
-m
Argument.