2016-08-25 3 views
0

Kann jemand erklären, wie die timeout für piped Befehle funktioniert? Zum BeispielTimeout-Aufruf bei piped-Befehlen

timeout 2s a | b 

Hier ist die timeout nur für den a Befehl angewendet?
Und wenn tatsächlich ein Timeout auftritt, würde dies zu einem Rohrbruch führen?

+2

Ja, 'timeout' ist ein regulärer Befehl, kein eingebauter, also wird er mit den Argumenten' timeout', '2s' und' a' ausgeführt. Wenn die Zeitüberschreitung auftritt, wird die Pipe für "b" EOF anzeigen, sobald alle Daten darin gelesen wurden (weil es keinen Prozess mehr gibt, um in die Pipe zu schreiben). Aber das unterbrochene Rohr ist ein Problem auf der Schreibseite, nicht auf der Leseseite. –

+0

@ JonathanLeffler: Vielen Dank, schöne Notiz auf Rohr :) – sjsam

Antwort

1

Ja, timeout ist ein regulärer Befehl, keine eingebaut, so wird es mit Argumenten timeout, 2s und a ausgeführt. Wenn die Zeitüberschreitung auftritt, zeigt das Leseende der Pipe in b EOF an, sobald alle Daten darin gelesen wurden (weil kein Prozess mehr zum Schreiben in die Pipe vorhanden ist). Aber b wird kein SIGPIPE-Signal von a beenden (ob wegen einer Zeitüberschreitung oder weil es vor dem Timeout beendet wurde); Ein unterbrochenes Rohr ist ein Problem auf der Schreibseite, nicht auf der Leseseite.

Verwandte Themen