2016-10-01 7 views
2

Из того, что я прочитал, поведение по умолчанию для wait/waitpid - это ожидание изменения состояния в процессе. То, что я не могу найти, - это ожидаемое поведение двух процессов waitpid с использованием того же аргумента pid_t.Что происходит, когда два процесса ждут одного и того же ребенка?

Как возвращение, так и продолжение выполнения, или это состояние гонки, когда только один замечает изменение состояния?

+1

Как два процесса могут иметь один и тот же ребенок? – Olaf

ответ

4

Только родительский объект может ждать() для процесса, и процесс может, конечно, иметь только одного родителя.

Родительский процесс может, однако, иметь несколько потоков. В случае нескольких потоков, ожидающих того же самого ребенка, POSIX указывает, что только один из них увидит изменение состояния. Чтобы разрешить нескольким потокам видеть изменение состояния, вы должны использовать waitid() с флагом WNOWAIT.

POSIX: status information

+1

Nitpicking: «* Только родитель может ждать() для процесса *« Любой процесс может (вызвать) ждать, но * только родительский * будет делать это успешно. – alk