Como executar um processo de sistema com Java

GNU

Linux

Java por si só inclui uma ampla coleção de classes com as principais funcionalidades que podemos precisar, se você não oferecer Na API, é muito possível que haja uma biblioteca que o fornecesse. Mas, em algum momento, talvez nos recebemos o caso de um comando de comando retorna as informações ou realiza a ação que precisamos. Pode ser um comando do sistema GNU / Linux, Windows ou Mac OS X ou um script em Java, Python, Ruby ou outra linguagem de programação. Através da classe Process e ProcessBuilder, é possível lançar um processo de qualquer comando de comando e acessar sua entrada padrão, saída padrão e saída de erro.

A classe de processo representa o processo que lançamos, temos dois Maneiras de obter uma referência esta aula, uma com runtime.getinstance (). EXEC () e outra com a classe ProcessBuilder com ambos, será possível estabelecer variáveis de ambiente, o diretório de trabalho ou redirecionar a entrada e saída. Referência obtida a uma instância do processo com o método GetInputStream (), leremos a saída padrão do processo, com GetErrorInputStream () a saída de erro e com GetToutPutStream () podemos enviar conteúdo para a entrada padrão. Outros métodos de utilidade nos permitirão saber se o processo ainda está vivo com Isalive (), obtenha o código de saída com o ExitValue (), espere que ele termine com WaitFor (). Finalmente, com destruir () podemos terminar abruptamente o processo.

Eles não são da notícia notável do Java 8, mas a partir desta versão você pode definir uma espera máxima para o término do processo, as variáveis de ambiente e O diretório de trabalho. E mais mudanças pequenas, mas muito úteis, pois estas terão sido adicionadas a outras classes da API.

Isso é possível fazer qualquer coisa que o sistema possa fazer de acordo com os comandos que instalaram ou podem ser instalados e Isso significa que está ao alcance do Java em um sistema GNU / Linux, o poder da sua linha de comando. Por exemplo, suponha que queremos saber em um programa Java o tempo que foi iniciado um sistema que seria útil se quisermos implementar algum tipo de métricas de monitoramento com o atuador de inicialização da mola. O Java não possui um método que fornece essas informações em sua API, no entanto, no GNU / Linux, podemos saber esses dados usando o sistema de arquivos virtual acessível em / proc, especificamente no arquivo / proc / uppertime. Este arquivo contém dois números O primeiro é aquele que nos interessaria sendo o número de segundos desde o início do sistema e o segundo a hora em que permaneceu em repouso. O segundo número em um sistema com um processador com vários núcleos físicos ou lógicos é provável que seja maior do que o primeiro.

1 2 

uptime.sh

Este seria o programa Java para saber quanto tempo um sistema GNU / Linux foi iniciado. Primeiro, o processo é criado, espera-se que termine e seu código de saída é obtido, a saída do processo é obtida (entrada para o programa), o resultado é processado e os segundos que o sistema começou.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 
package io.github.picodotdev.blogbitix.javaprocess; import java.io.BufferedReader; import java.io.InputStreamReader; import java.math.BigDecimal; import java.text.MessageFormat; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; public class Main { public static void main(String args) throws Exception { // Iniciar el proceso ProcessBuilder builder = new ProcessBuilder().command("cat", "/proc/uptime"); Process process = builder.start(); // Alternativa a ProcessBuilder //Process process = Runtime.getRuntime().exec(new String { "cat", "/proc/uptime" }); // Esperar a que termine el proceso y obtener su valor de salida process.waitFor(10, TimeUnit.SECONDS); int value = process.exitValue(); if (value != 0) { throw new Exception(MessageFormat.format("Código de salida con error (%d)", value)); } // Obtener la salida del proceso BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8")); String result = br.lines().collect(Collectors.joining("\n")); br.close(); // Obtener el tiempo desde el inicio del sistema String seconds = result.split(" "); System.out.printf("Segundos desde el inicio del sistema: %.2f", new BigDecimal(seconds)); } }

maain.java

1 2 
Segundos desde el inicio del sistema: 3115,77 

main.out

Executar um comando de comando nos dá acesso a um novo mundo de possibilidades, embora se pudermos melhor ter uma API disponível para invocar a funcionalidade que queremos, em vez de uma leitura de integração mais frágil e escrita na saída, erro e entrada do processo . No seguinte artigo baseado é isso, comentarei como enviar um email em Java digitalmente assinado com GPG, aplicando isso, aplicando o país e a cidade com base no endereço IP em um aplicativo da Web.

Terminal

O código fonte completo da fonte pode baixá-lo no repositório Bitix Blog hospedado no GitHub e testá-lo no seu computador em execução em execução:
./gradlew run

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *