Frank Dietrich schrieb:

> [EMAIL PROTECTED] (Walter Saner) wrote:
> 
> >| [EMAIL PROTECTED]:~$ time ls -R -AU /usr/share | wc
> >|   51909   49256  737261
> >|
> >| real    0m0.546s
> 
> Das sind in meinem Fall hier beim erstem 'ls' 31.8 Sekunden.

Das erscheint mir doch ein büschen sehr lang. Die erste Ausführung
der obigen Pipe dauerte hier ca. 1.1 Sekunden. Und tek hat seine
besten Jahre schon lange hinter sich.

> >| [EMAIL PROTECTED]:~$ time ls -R -AU /usr/share | head -1 > /dev/null
> >|
> >| real    0m0.018s
> 
> 0.02 sek - perfekt (ich hätte es einfach probieren sollen)
> 
> Aber kannst Du mir erklären was da genau passiert? 

Der schreibende Prozess erhält das Signal SIGPIPE, wenn der lesende
Prozess die Pipe schliesst.

| [EMAIL PROTECTED]:~$ strace -e trace=signal ls -R -AU /usr/share | head -1
| rt_sigaction(SIGRTMIN, {0x401665d0, [], SA_SIGINFO}, NULL, 8) = 0
| rt_sigprocmask(SIG_UNBLOCK, [RTMIN], NULL, 8) = 0
| /usr/share:
| --- SIGPIPE (Broken pipe) @ 0 (0) ---
| +++ killed by SIGPIPE +++

> Ich war den Meinung alles was ls in die Pipe reinschreibt müsse auch
> wieder herausgelesen werden. Das scheint aber ja wohl dann nicht der

Wie willst du einen lesenden Prozess dazu zwingen - mit vorgehaltener
Waffe? ;-)

> Fall zu sein. Wie kommt also die Meldung vom head zu ls das es nicht
> weiter Daten liefern muß?

Das ist Sache des Kernels.


Ciao
Walter


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

Antwort per Email an