Pergunta sobre java – Por que evitar o uso de Runtime.exec () em java?

13
   Process p = Runtime.getRuntime().exec(command);
   is = p.getInputStream();
   byte[] userbytes = new byte[1024];
   is.read(userbytes);

Eu quero executar um comando shell no linux os de java. Mas os relatórios do pmd dizem que não usam java Runtime.exec (). Por quê? Qual é a razão ? Existe alguma alternativa para Runtime.exec ()?

Descrição do problema: Não use Runtime.exec () para executar comandos kannanrbk
Que mensagem é o pmd mostrando exatamente? Tudor
Qual é o motivo para evitar a execução do método Runtime.exec ()? . Isso é alguma injeção é possível? kannanrbk
Esta é uma afirmação absurda, com absolutamente nenhum apoio ControlAltDel

Sua resposta

1   a resposta
36

java.lang.ProcessBuilder torna muito mais fácil especificar um processo, configurar seu ambiente, gerá-lo e manipular seus descritores de arquivo.

Essa classe é usada para criar processos do sistema operacional.

CadaProcessBuilder instância gerencia uma coleção de atributos do processo. ostart() método cria um novoProcess instância com esses atributos. ostart() O método pode ser chamado repetidamente na mesma instância para criar novos subprocessos com atributos idênticos ou relacionados.

...

Iniciar um novo processo que usa o diretório de trabalho e o ambiente padrão é fácil:

 Process p = new ProcessBuilder("myCommand", "myArg").start();

Aqui está um exemplo que inicia um processo com um diretório e ambiente de trabalho modificados:

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();
Obrigado Mike. O ProcessBuilder funcionou excelente no meu caso. Muito mais fácil do que com Runtime.exec (). Mais informações e exemplos emdocs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html tremendows

Perguntas relacionadas