Есть ли надежный способ для дочернего процесса передать готовность родительскому процессу?

У меня есть (Java) процесс, который смотрит на отдельный процесс foo . foo занимает некоторое количество секунд, чтобы начать, а затем работает. Control возвращается к родительскому процессу, как только foo запущен, но не обязательно готов.

Заметим также, что foo записывает удобочитаемый вывод на оба stdout и в режиме отладки stderr .

Параметры, о которых я знаю:

  1. sleep родительский процесс в течение n секунд, где n теоретически больше, чем foo когда-либо будет.
  2. Попросите родительский процесс найти что-то особенное в stdout или stderr ребенка и заблокировать его до тех пор, пока он не будет замечен.
  3. Прикоснитесь к некоторому файлу маркера в ОС, когда foo готов, и родительский процесс просмотрите этот файл.

Мне не нравятся какие-либо из этих параметров (1. имеет условие гонки, 2. включает в себя соответствие магических строк и 3. рискует столкнуться с несколькими процессами foo ). Идя другим путем (от родителя к ребенку), я мог бы отправить сигнал для общения, но я не знаю, как лучший способ для дочернего процесса передать свое состояние родительскому.

Ребенок мог отправить сигнал родителям. SIGUSR1 и SIGUSR2 существуют для такой ситуации ad hoc и могут быть идеальными здесь.

Ваше приложение может легко найти идентификатор процесса своего родителя с эквивалентом Java getppid() , или в качестве альтернативы, возможно, вы могли бы передать родительскому персоналу свой собственный PID ( $$ ) в командной строке в качестве аргумента, который может выбрать ваш код Java вверх.