Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-05-2009, 09:59   #1
LimiT-MaTz
Senior Member
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 673
[JAVA] Process exec

Buongiorno,

vi spiego brevemente quello che vorrei realizzare.
ho un programma 'X' (testuale) da cui devo raccogliere l'output da un programma java.
il programma 'X' non è oneshot ma rimane in esecuzione finchè non lo killo ( è uno sniffer ).

Mi interesserebbe creare un wrapper in java che mi permettesse tramite 2 metodi di eseguire il programma:
public void start() => fa partire il programma
public void stop() => ferma l'esecuzione e ritorna l'output ( stdout o eccezzione nel caso vi sia stata un return != 0 quando ho fatto partire il programma).

Il tutto dovrebbe essere eseguito su un Thread.

Ora vi espongo quanto realizzato e i problemi riscontrati.
Leggendo la doc ho trovato la funzione exec che mi permette di eseguire su un Thread un 'programma' e di avere a disposizione i 3 stream (stdin stdout stderr) .
perfetto, non mi sembra neanche vero, è quello che fa al caso mio.

nel metodo start() => faccio partire la exec.
nel metodo stop() => verifico che il processo creato non sia uscito. Se è uscito sarà probabilmente un errore altrimenti se è ancora in esecuzione non ci sono problemi.Fatte queste considerazioni mi verrebbe l'idea di prendermi l'stdout o stderr ( dipende da exit ) e leggerne il contenuto e sucessivamente invocare una proc.destroy() ( per killare il processo ).

Ecco che spuntano i problemi, quando chiamo la stop, nello stream (stdout) non trovo nulla. Come se il programma non avesse scritto nulla in output ( cosa non vera ).

La cosa interessante è che cambio programma con uno oneshot (esempio ls) il sistema funziona. Mi è venuto il dubbio che i dati fossero disponibili solo quando il processo è terminato.Allora ho provato a terminare il processo con destroy, ma cosi' facendo perdo anche gli stream.

vi incollo il codice per essere piu' chiaro
Codice:
		public void start(){
			try{  
					ProcessBuilder pb = new ProcessBuilder(binpath);
					proc = pb.start();

			}
			catch (IOException e)  
			{  
				System.err.println("exec error: " + e);  
			}  
		}
		public String terminate(){
			String result = "";
			int exit = 0;
			try
			{
				exit = proc.exitValue();
			}
			catch (IllegalThreadStateException e) {
				exit = 0;
			}
			if(exit == 0){
				InputStream in = proc.getInputStream();
				result = convertStreamToString(in);
				System.out.println(result);
				proc.destroy();
			}
			else{
				InputStream in = proc.getErrorStream();   
				System.out.println(convertStreamToString(in));
				throw new RuntimeException();
			}
			return result;
		}
		 public String convertStreamToString(InputStream is) {
		        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		        StringBuilder sb = new StringBuilder();
		 
		        String line = null;
		        try {
		            while ((line = reader.readLine()) != null) {
		                sb.append(line + "\n");
		            }
		        } catch (IOException e) {
		            e.printStackTrace();
		        } finally {
		            try {
		                is.close();
		            } catch (IOException e) {
		                e.printStackTrace();
		            }
		        }
		        return sb.toString();
		    }

}
avreste qualche consiglio da darmi? grazie
__________________
MaTz!
LimiT-MaTz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
ROG Cronox: ASUS alza l'asticella dei ca...
Lenovo annuncia nuovi sistemi per la vir...
M6 e M5 Ultra, i primi benchmark conferm...
La nuova falla della cybersecurity &egra...
The Blood of Dawnwalker, il sequel potre...
Colpiti i data center Amazon: irrecupera...
Google Wallet, nuova interfaccia in arri...
iPhone Duo, problemi di produzione per i...
Firefox diventa più veloce con PDF e JPE...
WhatsApp, arriva su iOS la nuova scorcia...
Snap presenta Specs: realtà aumentata, c...
SteamOS verso un cambiamento epocale: ar...
Recensione HUAWEI FreeBuds Neo, piccoli ...
TSMC aumenta i costi di produzione: AMD ...
L'Europa sfida i magnati dei combustibil...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:32.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v