Existe uma maneira robusta para um processo filho sinalizar prontidão para seu pai? [fechadas]

2

Eu tenho um processo (Java) que está visualizando um processo separado foo . foo leva alguns segundos para iniciar, então está realmente funcionando. O controle retorna ao processo pai assim que foo é iniciado, mas não necessariamente pronto.

Observe também que foo grava a saída legível para ambos stdout e, no modo de depuração, stderr .

As opções de que estou ciente:

  1. sleep do processo pai para n segundos, onde n é teoricamente maior que foo .
  2. Peça que o processo pai procure algo especial no stdout ou stderr da criança e bloqueie até que seja visto.
  3. Toque em algum tipo de arquivo de marcador no sistema operacional quando foo estiver pronto e faça com que o processo pai assista a esse arquivo.

Eu realmente não gosto de nenhuma dessas opções (1. tem uma condição de corrida, 2. envolve a combinação de sequências de caracteres mágicas e 3. arrisca a colisão de vários processos de foo ). Indo para o outro lado (pai para filho) eu poderia enviar um sinal para se comunicar, mas não estou ciente de uma maneira melhor para o processo filho comunicar seu estado ao pai.

    
por dimo414 01.07.2015 / 20:15

1 resposta

2

A criança pode enviar um sinal para os pais. SIGUSR1 e SIGUSR2 existem para esse tipo de situação ad hoc e podem ser ideais aqui.

Seu aplicativo pode encontrar o id do processo de seu pai com bastante facilidade com o equivalente em Java de getppid() , ou como alternativa talvez você possa fazer o pai passar seu próprio PID ( $$ ) na linha de comando como um argumento Código Java poderia pegar.

    
por 01.07.2015 / 22:51