Salut,
Au contraire je pense que le problème vient du système...
Généralement sous les systèmes Unix on utilise
fork() puis
exec() pour lancer un nouveau processus :
- fork() duplique le processus courant afin de créer un nouveau processus.
- exec() remplace le processus courant par un autre programme.
:arrow: Le problème vient du fait que le
fork() copie l'intégralité du processus courant, et comme dans son cas l'application occupe 2Go le nouveau processus en occupera aussi 2Go, mais seulement entre le
fork() et le
exec()... ce qui provoque le "Not enough space" :?
Normalement sous Linux ce problème ne devrait pas avoir lieu, puisque
fork() ne fonctionne pas exactement de la même manière (il crée un nouveau process mais ne duplique pas la mémoire de suite, mais seulement lors de la première écriture dans la mémoire), ce qui permet de faire un
fork()+
exec() sans exploser la mémoire...
Normalement il existe les appels systèmes
vfork() et/ou
posix_spawn() qui évite cette copie de mémoire...
Plus d'info sur le sujet :
http://developers.sun.com/solaris/ar...ubprocess.html
:arrow: Il faudrait savoir la version de ton OS et de ta JVM.
Et comme solutions tu pourrais :
- Vérifier s'il n'existe pas une JVM plus récente pour ton système qui corrigerait ce problème.
- Utiliser JNI pour appeler une méthode native qui utiliserait vfork() ou posix_spawn() pour lancer ta commande (attention car il faut quand même de bonne base de programmation système en C).
- Te créer une application serveur minimum qui se chargera de lancer les processus (ex: tu recois la commande par socket et tu lances le programme).
Bon courage...
a++