2011-03-27 2 views
0

Je veux remplacer le processus Java actuel par un nouveau comme le fait le Unix exec. Il y a déjà eu un similar question ici, mais je préférerais une solution consommant le moins de mémoire possible (le accepted answer suggère d'utiliser ClassLoader, ce qui pourrait conduire à des fuites de mémoire, une solution simple similaire serait d'utiliser un autre processus juste pour commencer le bon). Cela peut être fait de manière dépendante de la plateforme en utilisant JNI, et je pense que je peux le faire pour Unix (et un solution pour Unix semble déjà exister), mais je ne connais presque rien à propos de l'API Windows correspondante. Quelle fonction Windows devrais-je appeler? Est-ce que quelqu'un l'a déjà fait?Comment remplacer le processus Java actuel dans Windows en utilisant JNA/JNI?

+0

Commencez-vous un autre processus JVM? Si oui, de quelles inefficiences de mémoire vous inquiétez-vous? –

+0

L'utilisation d'Unix exec résout tous les problèmes; la remarque sur la consommation de mémoire concerne les solutions Java pures. – maaartinus

Répondre

0

Avec Windows, il existe de nombreux sous-systèmes à choisir parmi ceux exécutés sur le système d'exploitation de base, il est donc utile d'avoir une idée de ce que vous visez. Par exemple, si vous pouvez utiliser la bibliothèque d'exécution C, vous pouvez simplement utiliser la famille de fonctions _exec() qui sont très similaires à leurs cousins ​​unix. Peut-être que vous pouvez modifier jniexec pour travailler avec Windows en utilisant ceux-ci.

+0

Vous avez écrit "si vous pouvez utiliser la bibliothèque d'exécution C" - comment savoir? Et si je voulais le faire dans mon application sur votre ordinateur (sous Windows XP, Vista ou 7, je me fiche de la version plus ancienne ou exotique)? AFAIK, avec JNI je dois empaqueter une petite DLL contenant l'appel à '_exec', et quoi de plus? – maaartinus

+0

Je ne suis pas un expert sur toutes les façons dont vous pouvez obtenir la bibliothèque d'exécution C. Certainement une façon est d'utiliser Visual Studio pour construire votre bibliothèque. [Wikipedia] (https://secure.wikimedia.org/wikipedia/fr/wiki/Microsoft_Windows_library_files#Msvcrt.dll) a quelques mots sur ce sujet. –

+0

Le comportement de _exec() dans Windows est assez différent de celui de l'API POSIX. Plus particulièrement, il ne réutilisera pas le même PID, de sorte que le processus parent pensera que le processus enfant s'est terminé. –

0

L'API Win32 n'inclut pas le concept de 'exec'. L'API POSIX le fait. L'API WinNT de bas niveau a les blocs de construction, mais il est assez complexe de les utiliser, et, au moins dans le passé, a nécessité le recours à des fonctionnalités non documentées.

Questions connexes