Comment utiliser la classe Process pour contrôler l'exécution de processus externes en Java 9
Présentation :
En Java, en utilisant la classe Process, nous pouvons facilement interagir avec des processus externes. Java 9 introduit plusieurs nouvelles fonctionnalités, notamment une approche plus sécurisée et flexible lors du traitement des processus externes. Cet article explique comment utiliser la classe Process dans Java 9 et démontre son utilisation avec des exemples de code.
import java.io.IOException; public class ExternalProcessExample { public static void main(String[] args) { ProcessBuilder processBuilder = new ProcessBuilder("notepad.exe"); try { Process process = processBuilder.start(); } catch (IOException e) { e.printStackTrace(); } } }
Dans l'exemple ci-dessus, nous avons créé un objet ProcessBuilder et spécifié la commande du processus externe à démarrer comme "notepad.exe". Ensuite, nous utilisons la méthode start() pour démarrer le processus externe.
2.1 Écoute de l'état de sortie du processus
Nous pouvons utiliser la méthode waitFor() pour attendre la sortie d'un processus externe et obtenir son état de sortie. L'exemple de code est le suivant :
try { int exitValue = process.waitFor(); System.out.println("Process exited with value: " + exitValue); } catch (InterruptedException e) { e.printStackTrace(); }
Dans l'exemple ci-dessus, nous utilisons la méthode waitFor() pour attendre la sortie du processus externe et stocker l'état de sortie dans la variable exitValue.
2.2 Obtenir le flux d'entrée/sortie d'un processus externe
Parfois, nous avons besoin d'obtenir le flux d'entrée/sortie d'un processus externe afin d'interagir avec le processus. La classe Process fournit les méthodes getInputStream(), getOutputStream() et getErrorStream() pour obtenir le flux correspondant.
try { // 获取进程输入流并发送数据 OutputStream outputStream = process.getOutputStream(); outputStream.write("Hello".getBytes()); // 获取进程输出流并读取数据 InputStream inputStream = process.getInputStream(); byte[] buffer = new byte[1024]; int length = inputStream.read(buffer); String output = new String(buffer, 0, length); System.out.println("Process output: " + output); // 获取进程错误流并读取错误信息 InputStream errorStream = process.getErrorStream(); byte[] errorBuffer = new byte[1024]; int errorLength = errorStream.read(errorBuffer); String errorMessage = new String(errorBuffer, 0, errorLength); System.out.println("Process error: " + errorMessage); } catch (IOException e) { e.printStackTrace(); }
Dans l'exemple ci-dessus, nous utilisons la méthode getInputStream() pour obtenir le flux d'entrée du processus, et la méthode getOutputStream() pour obtenir le flux de sortie du processus et la méthode getErrorStream() pour obtenir le flux d'erreurs de le processus. Nous pouvons ensuite utiliser ces flux pour envoyer des données au processus, lire la sortie du processus et lire les informations d'erreur du processus.
process.destroy();
De plus, nous pouvons également utiliser la méthode destroyForcably() pour forcer la destruction du processus même si le processus ne répond pas. L'exemple de code est le suivant :
process.destroyForcibly();
Parfois, pour une raison quelconque, nous devons interrompre l'opération d'attente de la sortie du processus externe. Nous pouvons utiliser la méthode interruption() pour interrompre les opérations. L'exemple de code est le suivant :
Thread currentThread = Thread.currentThread(); currentThread.interrupt();
ProcessBuilder processBuilder = new ProcessBuilder() .command("ping", "www.google.com") .redirectError(ProcessBuilder.Redirect.INHERIT);
Dans l'exemple ci-dessus, nous utilisons la méthode command(String...) pour spécifier la commande de processus externe comme 'ping www.google.com'. Nous utilisons également la méthode redirectError(ProcessBuilder.Redirect) pour rediriger le flux de sortie d'erreur vers le flux de sortie standard.
Résumé :
Dans Java 9, l'utilisation de la classe Process pour contrôler l'exécution de processus externes est devenue plus sécurisée et flexible. Nous pouvons utiliser la classe ProcessBuilder pour créer et démarrer des processus externes, et utiliser la classe Process pour surveiller l'état du processus, obtenir des flux d'entrée/sortie et interagir avec le processus. De plus, Java 9 fournit également de nouvelles méthodes pour définir et limiter l'exécution de processus externes.
Références :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!