Das ist also kein Problem als solches, nur etwas, worauf ich neugierig bin. Ich verwende Linux Mint MATE, das von Debian abgezweigt ist. Wenn ich mache:
ps afx | grep abcdefg
Ich bekomme:
16599 pts/3 S+ 0:00 | \_ grep --color=auto abcdefg
Es zeigt also den Prozess für den Grep. Aber das ist nach dem ps
in der Pipe: Ich hätte gedacht, dass das oben genannte das tut ps
, die Ergebnisse erhält und sie dann an weitergibt grep
. Wie kommt es also, dass das grep
tatsächlich in den ps
Ergebnissen auftaucht ? Passiert es nicht danach? Ich glaube, mir fehlt etwas Grundlegendes an dem, was die Pfeife tatsächlich tut.
Ich denke, hier ist ein gewisses Timing erforderlich.
(Shell-Prozess ist aufgehängt)
Es spielt keine Rolle, was zuerst gestartet wird, da der Schreiber sowieso blockiert, bis ein Leser sein Ende öffnet. Da praktisch jedes vernünftige Unix-Programm E / A initiiert, bevor es sich um etwas anderes kümmert,
ps
bleibt es hängen, bis dergrep
Prozess so weit etabliert ist, dass er zumindest am Leseende dieser Pipe geöffnet wird.(diesmal nicht hängen)
Diese Reihenfolge bedeutet, dass Sie immer w / a
grep
dort landen .Es gibt jedoch auch andere Möglichkeiten.
Wenn Sie beispielsweise nach dem argv0 eines laufenden Prozesses mit einer GNU suchen
ps
, können Sie einfach Folgendes tun:Wenn Sie verwenden möchten
grep
, ist dies völlig machbar, aber bei einer erneuten Suche nach argv0:... wodurch die Argumente jedes Befehls ausgeschlossen werden.
Und natürlich gibt es:
quelle