[Java] Traitement de la situation où le programme qui écrit dans le flux de sortie du processus ne se termine pas même si waitFor

Il s'agit d'un problème survenu lors de l'exécution du contenu de l'article ci-dessus.

problème

Quand j'ai écrit à ʻOutputStream (= stdin) de Process, cela ne s'est pas terminé même si waitFor` avec une limite de temps.

Code problématique


//Essai d'exception-En supposant que la capture se fasse à l'extérieur
Process process = new ProcessBuilder(commands).start();

//Ecrire à stdin
OutputStream os = process.getOutputStream();
os.write(multipartFile.getBytes());

boolean result = process.waitFor(5, TimeUnit.SECONDS);

Action / Cause

J'ai essayé de fermer OutputStream` et cela a été résolu, donc je pense que c'était probablement parce que j'ai dû attendre pour écrire sans fin.

Après avoir traité


//Essai d'exception-En supposant que la capture se fait à l'extérieur
Process process = new ProcessBuilder(commands).start();

//Ecrire à stdin
try (OutputStream os = process.getOutputStream()) {
  os.write(multipartFile.getBytes());
}

boolean result = process.waitFor(5, TimeUnit.SECONDS);

Recommended Posts

[Java] Traitement de la situation où le programme qui écrit dans le flux de sortie du processus ne se termine pas même si waitFor
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
Une histoire qui a souffert d'un espace qui ne disparaît pas même s'il est taillé avec Java La cause est BOM
Lors de l'utilisation de JPA (Hibernate), l'application Java ne se termine pas même si elle atteint la dernière ligne de la méthode main.
[Java] Modifier le traitement en fonction de la situation avec le modèle de stratégie
[Firebase] Firebase Auth currentUser ne devient pas nul même après la désinstallation de l'application
Comment interagir avec un serveur qui ne plante pas l'application
Sortie du livre "Introduction à Java"
J'ai créé un programme qui recherche la classe cible à partir du processus surchargé avec Java
Méthode de réglage qui ne change pas la taille même si le CSS est changé
Le problème que le JDK défini dans JAVA_HOME n'apparaît pas même si java -version est exécuté à l'invite de commande
Même en Java, je veux sortir vrai avec un == 1 && a == 2 && a == 3 (magie grise qui n'est pas tant que magie noire)
MockMVC renvoie 200 même si je fais une demande vers un chemin qui n'existe pas
Que faire si l'annotation JSON Hint ne fonctionne pas avec Lombok et JSONIC
[Java] Le problème selon lequel les images téléchargées ne sont pas mises à jour en raison de l'influence du cache
Java: utilisez Stream pour trier le contenu d'une collection
Un programme (Java) qui génère la somme des nombres pairs et impairs dans un tableau
Que faire si vous avez installé Ruby avec rbenv mais que la version ne change pas
Mémo qui passe à l'écran de connexion si vous n'êtes pas connecté avec l'appareil
Comment réduire même un peu la charge du programme lors de la combinaison de caractères avec JAVA