Come eseguire un processo di sistema con java

java

GNU

linux

java di per sé include una vasta collezione di classi con le principali funzionalità di cui potremo aver bisogno, se non lo offri Nell’aPI è molto possibile che ci sia una biblioteca che lo fornisce. Ma qualche volta forse ci viene dato il caso che un comando di comando restituisca le informazioni o esegue l’azione di cui abbiamo bisogno. Può essere un comando del sistema GNU / Linux, Windows o Mac OS X o uno script in Java, Python, Ruby o altro linguaggio di programmazione. Attraverso il processo e la classe ProcessBuilder è possibile per noi avviare un processo di qualsiasi comando di comando e accedere al suo ingresso standard, all’output standard e all’output standard.

La classe di processo rappresenta il processo che avremo lanciato, ne avremo due Modi per ottenere un riferimento a questa classe, uno con runtime.getinstance (). Exec () e un altro con la classe ProcessBuilder con entrambi sarà possibile stabilire variabili di ambiente, la directory di lavoro o reindirizzare la voce e l’uscita. RIFERIMENTO Ottenuto a un’istanza di processo con il metodo GetInputStream () Leggeremo l’output standard del processo, con GetErRoRinputStream () l’uscita dell’errore e con GepiutputStream () possiamo inviare contenuti all’ingresso standard. Altri metodi di utilità ci consentiranno di sapere se il processo è ancora vivo con ISALIVE (), ottenere il codice di uscita con EXITVALUE (), attendere che finisca con Waitfor (). Alla fine con Destroy () possiamo finire bruscamente il processo.

Non provengono dalla notevole notizia di Java 8 ma da questa versione è possibile impostare un attesa massima per la cessazione del processo, le variabili di ambiente e La directory di lavoro. E più piccoli cambiamenti ma molto utili come questi saranno stati aggiunti ad altre classi dell’API.

È possibile fare qualsiasi cosa che il sistema possa fare in base ai comandi installati o possono essere installati e Questo significa che è a portata di mano di Java in un sistema GNU / Linux il potere della tua riga di comando. Ad esempio, supponiamo di voler sapere in un programma Java il tempo che è stato avviato un sistema che sarebbe utile se vogliamo implementare un tipo di metrica di monitoraggio con l’attuatore di avvio a molla. Java non ha un metodo che fornisce queste informazioni nella tua API, tuttavia, in GNU / Linux possiamo conoscere questi dati utilizzando il file system virtuale accessibile in / proc, specificamente nel file / proc / uttime. Questo file contiene due numeri il primo è quello che ci interesserebbe essendo il numero di secondi dal momento che il sistema è iniziato e il secondo il tempo è rimasto a riposo. Il secondo numero in un sistema con un processore con diversi nuclei fisici o logici è probabile che sia più alto del primo.

1 2 
$ cat /proc/uptime 1488.79 5666.60 

uptime.sh

Questo sarebbe il programma Java per sapere quanto è stato avviato un sistema GNU / Linux. Innanzitutto, il processo è stato creato, si prevede che finisca e il suo codice di uscita è ottenuto, viene ottenuta l’uscita del processo (input per il programma), il risultato viene elaborato e il secondo che il sistema è iniziato.

 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

Eseguire un comando di comando ci dà accesso a un nuovo mondo di possibilità anche se se possiamo meglio avere un’API disponibile per invocare la funzionalità che desideriamo invece di una lettura di integrazione più fragile e scrittura all’uscita, all’errore e all’ingresso del processo . Nel seguente articolo basato su è questo commenterò come inviare un’e-mail in Java firmata digitalmente con GPG, applicando lo stesso, possiamo ottenere il paese e la città in base all’indirizzo IP in un’applicazione Web.

Terminale

Il codice sorgente Full Source è in grado di scaricarlo dal repository Blog Blog ospitato in GitHub e testarlo sul computer in esecuzione il comando successivo: <"A5195F0606">

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *