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.