Guia prático para trabalhar de forma robusta com processos externos em Java: como evitar travamentos por causa de fluxos não lidos
stdout/
stderr, configurar corretamente as codificações de saída (por exemplo,
UTF-8,
CP866), levar em conta diferenças multiplataforma de comandos (
ls vs
dir), tratar permissões e códigos de saída via
process.exitValue(), fechar recursos sem vazamentos e evitar bloqueios mútuos em interações interativas. Abordamos o uso adequado de
ProcessBuilder, a leitura paralela dos fluxos (threads/
ExecutorService), o encerramento apropriado via
process.destroy(), bem como caminhos portáveis com
File.separator.