ProcessExecutor : exécution de processus natif unifiée

Technique

La classe com.jalios.jcms.tools.ProcessExecutor a fait son apparition dans JCMS 7.0.
Cette classe permet l'exécution de processus natifs de manière simplifiée et unifiée.

Les fonctionnalités fournies par cette classe :

  • Timeout d'exécution : Si un processus met plus d'un certain temps à s'exécuter, il est tué. 
    La valeur par défaut de ce timeout est de 10 minutes.
  • Capture de la sortie standard / erreur

Exemple d'utilisation (cf javadoc de la classe ProcessExecutor) :

  ProcessExecutor executor = new ProcessExecutor("/bin/echo", "Hello World!");
  executor.setCaptureOutput(true);
     
  ProcessExecutionResult result = executor.execute();
  assertEquals(0, result.getExitValue());
  assertFalse(result.hasTimedOut());
  assertEquals("Hello World!", result.getStdout().trim());
  assertEquals("", result.getStderr());

Cette classe est notamment utilisée par les modules suivants :

Quelques points d'attention à connaitre sur l'exécution de processus natifs depuis Java :

  • Performance : Sur Unix, la création d'un processus natif s'effectue via un fork du processus de la JVM ; le nouveau processus ainsi créé consommera autant de mémoire que celle qui a été allouée à la JVM.
    Conséquence : pour éviter au système de venir à cours de mémoire et d'utiliser le swap (ce qui provoque un impact dramatique sur les performances du serveur), il est très important de configurer votre serveur avec une quantité de mémoire (RAM) bien plus importante que l'allocation effectuée sur la JVM. Il s'agit d'un bug connu de la JVM, planifié pour correction dans Java 8 : http://bugs.sun.com/view_bug.do?bug_id=5049299
  • Sécurité : Pour éviter à un utilisateur malicieux de déclencher l'exécution de n'importe quel processus natif, il est capital de contrôler le chemin du binaire et de ses paramètres avant de les communiquer à la classe ProcessExecutor. L'idéal est de ne jamais utiliser les valeurs reçues de l'utilisateur ou en provenance d'un service externe, ou sinon d'en faire une validation par liste blanche.

Vous pourrez retrouver ici les dernières nouvelles et les retours d'expérience de l'équipe technique Jalios :

  • Points techniques
  • Retours d'expérience
  • Bonnes pratiques
  • Sécurité
  • Méthodologie Etc.

Ainsi que les principales actualités Jalios.