Autor Thema: Funktionsweise der 'Pipe' nicht verstanden!?  (Gelesen 2078 mal)

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Funktionsweise der 'Pipe' nicht verstanden!?
« am: 01. Dezember 2006, 15:25:56 »
Hi,

jetzt hab ich bis heute vielleicht schon gigabyte-weise die ausgaben von programmen in andere umgeleitet, aber anscheinend die funktionsweise der 'Pipe' bis heute nicht verstanden. folgendes beispiel:

cat /etc/hosts | grep -i `hostname` | awk '{print $1}'
 1. cat liest die datai /etc/hosts und haette sie an stdout gegeben wenn nicht ...
 2. ... grep die ausgabe entgegen genommen haette. dessen ausgabe ...
 3. ... wird an awk uebergeben und dessen ausgabe geht an stdout. was in diesem fall eine ip adresse waere.

habe ich in diesem beispiel einen denkfehler oder was prinzipielles nicht verstanden? da ich mir folgende ausgabe nicht erklaeren kann.

hrimthur/var/adm# ps -ef | grep -i affe
    root   469   366  0 15:18:14 pts/1    0:00 grep -i affe
hrimthur/var/adm#

wie kann in der ausgabe von ps der prozess von grep gelistet sein wenn doch 'ps' vor 'grep' ausgefuehrt wird. das lustige ist: es ist nicht immer so. ein staendiges 'pfeil-taste-nach-oben' und 'enter' bringt zu tage, dass ca. alle 5-8 mal ueberhaupt keine ausgabe kommt.

hrimthur/var/adm# ps -ef | grep -i squid
    root   418   366  0 15:02:00 pts/1    0:00 grep -i squid
hrimthur/var/adm# ps -ef | grep -i squid
    root   420   366  0 15:02:01 pts/1    0:00 grep -i squid
hrimthur/var/adm# ps -ef | grep -i squid
hrimthur/var/adm# ps -ef | grep -i squid
    root   424   366  0 15:02:02 pts/1    0:00 grep -i squid
hrimthur/var/adm# ps -ef | grep -i squid
    root   426   366  0 15:02:02 pts/1    0:00 grep -i squid
hrimthur/var/adm# ps -ef | grep -i squid

ich sitze hier an keinem problem. mir ist es nur aufgefallen und ich kann es mir nicht erklaeren.
ct,

sonnenblen.de - Das unabhängige Sun User Forum

Funktionsweise der 'Pipe' nicht verstanden!?
« am: 01. Dezember 2006, 15:25:56 »

Offline Drusus

  • Sobl Master
  • ****
  • Beiträge: 424
  • Intentionally left blank
Re: Funktionsweise der 'Pipe' nicht verstanden!?
« Antwort #1 am: 01. Dezember 2006, 16:09:53 »
Moin,

da ist in der Tat ein kleiner Denkfehler. Die mit der Pipe verbundenen Programme werden nicht nacheinander, sondern gleichzeitig gestartet. Dabei wird in deinem Fall dann der Filedescriptor 1 (Ausgabe) von dem ps-Befehl mit dem
Filedescriptor 0 (Eingabe) von dem grep-Befehl verbunden. Nun laufen beide Prozesse und der "ps" macht ein write der Daten, die dann bei "grep" mittels read entgegengenommen werden.
Nun wird ps natuerlich auch den grep in der Prozessliste sehen, da dieser ja noch auf die Ausgaben von "ps" wartet. Ergo ist es normal, dass du bei deinem "ps -ef | grep foo" auch den grep-Befehl wiederfindest, weil dort ja auch "foo" enthalten ist.

Warum das aber manchmal bei dir nicht der Fall ist, kann ich nicht sagen. Ich kann das hier nicht nachvollziehen und sehe immer den grep-Befehl in der Ausgabe.
 
Wenn du nach den squid suchst, so bsteht die Loesung vielleicht ein "ps -e | grep squid", da dann der grep selber nicht mehr auftritt. Je nachdem was du machen willst geht es auch noch einfacher mit "pgrep squid" (siehe "man pgrep").

Tschau,
  Drusus.

derchris

  • Gast
Re: Funktionsweise der 'Pipe' nicht verstanden!?
« Antwort #2 am: 05. Dezember 2006, 04:42:39 »
oder

ps -ef | grep quid

Und btw> tach an alle  :D