Unter welcher Bedingung erhält ein Python-Unterprozess eine SIGPIPE?

Ich lese die Python-Dokumentation zur Popen-Klasse im Abschnitt zum Unterprozessmodul und bin auf den folgenden Code gestoßen:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]

DasDokumentatio gibt auch an, dass

"Der Aufruf von p1.stdout.close () nach dem Start von p2 ist wichtig, damit p1 eine SIGPIPE erhält, wenn p2 vor p1 beendet wird.

Warum muss p1.stdout geschlossen werden, bevor wir ein SIGPIPE erhalten können, und woher weiß p1, dass p2 vor p1 beendet wird, wenn wir es bereits geschlossen haben?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage