Вызов чтения застревает при чтении из канала после закрытия конца записи канала в случае нескольких процессов - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть родительский процесс, который разветвляет два дочерних процесса. Stdin и stdouts каждого дочернего процесса отображаются для чтения и записи концов двух разных каналов. p1 [2], p2 [2]; После разветвления дочернего процесса 1, p1 [0] == стандартный ввод, p1 [1] = стандартный вывод дочернего процесса 1 p2 [0] == стандартный ввод, p2 [1] = стандартный вывод дочернего процесса 2

В родительский процесс, я пишу в конец записи первого дочернего процесса, то есть p1 [0], а дочерний процесс отправляет обратно выходные данные в p1 [1] (внутри дочернего процесса это стандартный вывод) все, что читается из p1 [1], записывается в p2 [0 ]. выходные данные процесса 2-го chil читаются из p2 [1] и регистрируются.

Однако даже после того, как я закрыл p1 [1], дочерний процесс все еще ожидает чтения на p1 [0]. Причинение остановки программы.

Однако, когда я не вызываю второй дочерний процесс, эта проблема не возникает. Как только выдается закрытие, дочерний процесс 1 перестает читать.

...