Pergunta

eu lançar um processo filho em Java da seguinte forma:

final String[] cmd = {"<childProcessName>"};
Process process = Runtime.getRuntime().exec(cmd);

Agora é executado em segundo plano. Tudo de bom e multa.

Se o meu programa agora cai (ele é ainda em dev :-)) o processo filho ainda parece pendurar ao redor. Como posso fazer isso automaticamente termina quando o processo dies pai Java?

Se ajudar, eu estou usando o Mac OS X 10.5

Foi útil?

Solução

Como você disse, addShutdownHook é o caminho a percorrer.

MAS:

  • Não há nenhuma garantia real de que seus ganchos de desligamento são executados se os termina programa. Alguém poderia matar o processo de Java e, nesse caso, o seu gancho de desligamento não será executada. (Como referido neste SO questão )

  • algumas das bibliotecas padrão têm seus próprios ganchos que pode funcionar antes de seu.

  • cuidado de impasses.

Outra possibilidade seria envolver seu programa java em um serviço.

Outras dicas

Eu trabalhei-lo eu mesmo já. Eu adicionar um gancho de desligamento, conforme a seguir:

final String[] cmd = {"<childProcessName>"};
final Process process = Runtime.getRuntime().exec(cmd);
Runnable runnable = new Runnable() {
    public void run() {
        process.destroy();
    }
};
Runtime.getRuntime().addShutdownHook(new Thread(runnable));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top