Maison >Java >javaDidacticiel >Comment utiliser la classe Process dans Java 9 pour contrôler l'exécution de processus externes

Comment utiliser la classe Process dans Java 9 pour contrôler l'exécution de processus externes

WBOY
WBOYoriginal
2023-07-29 23:21:301337parcourir

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.

  1. Créer un processus externe
    En Java 9, créer un processus externe est très simple. Tout d'abord, nous devons créer un objet ProcessBuilder à l'aide de la classe ProcessBuilder et spécifier la commande du processus externe à démarrer. Nous pouvons ensuite démarrer le processus externe en utilisant la méthode start(). Voici un exemple de code pour créer un processus externe :
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.

  1. Contrôler l'exécution des processus externes
    Une fois que nous avons démarré un processus externe, nous pouvons utiliser la classe Process pour contrôler son exécution. La classe Process fournit des méthodes pour nous aider à surveiller l'état des processus externes, à obtenir des flux d'entrée/sortie et à interagir avec les processus.

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.

  1. Destruction et interruption des processus externes
    Parfois, nous devons détruire manuellement des processus externes. Nous pouvons utiliser la méthode destroy() pour détruire le processus. L'exemple de code est le suivant :
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();
  1. Sécurité et restrictions sur les processus externes
    Dans Java 9, il est possible de configurer et de restreindre l'exécution de processus externes à l'aide de nouvelles méthodes de la classe ProcessBuilder. Utilisez la méthode command(String...) pour spécifier plus précisément la commande de processus externe à exécuter. De plus, le flux de sortie d'erreur peut être redirigé à l'aide de la méthode redirectError(ProcessBuilder.Redirect).
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 :

  1. Javadoc de l'API de processus Java 9 : https://docs.oracle.com/javase/9/docs/api/java/lang/Process.html
  2. Javadoc de l'API de processus Java 9 : https:// / /docs.oracle.com/javase/9/docs/api/java/lang/ProcessBuilder.html

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn