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?
Répondre
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.
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
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. –
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é. –
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.
- 1. Comment dupliquer le processus actuel?
- 2. comment remplacer le répéteur actuel dans l'angle
- 3. Remplacer le processus en cours
- 4. Qt: Tuer le processus actuel?
- 5. application Windows en java en utilisant eclipse
- 6. comment remplacer processus actuel sans extension shell, en passant gamme complète ARGV
- 7. Est-il possible de tuer un processus basé sur le nom du processus en utilisant java?
- 8. Comment mettre le datetime actuel dans MySQL en utilisant PHP
- 9. Comment fausse emplacement actuel dans l'iPhone en utilisant le code
- 10. Comment compter le nombre de threads dans chaque processus dans Windows en utilisant MFC
- 11. Comment remplacer le contrôle de fermeture dans Windows Form C#
- 12. Java XML-remplacer en utilisant org.xml.sax.XMLReader
- 13. Comment remplacer "./" dans Java?
- 14. en utilisant des centaines de processus enfants dans Windows?
- 15. Remplacer mon CMS actuel
- 16. Comment terminer le processus en utilisant VBScript
- 17. Création de processus Java pour exécuter la classe dans le pot actuel
- 18. Remplacer la constante Java en utilisant Maven?
- 19. Comment définissez-vous le répertoire actuel d'un processus débogué?
- 20. Comment exécuter unix commandes via Windows/Cygwin en utilisant Java
- 21. Contrôlez le processus vlc en Java
- 22. comment remplacer le \ n dans Java?
- 23. lien insatisfait: SolarisParallel en utilisant rxtx pour remplacer java comm api dans Windows XP
- 24. Exécution d'un processus que l'utilisateur actuel d'un processus système
- 25. Comment remplacer des caractères non valides en utilisant java
- 26. l'utilisateur actuel Liferay en utilisant un simple code Java
- 27. Java comment remplacer le backslash?
- 28. Comment remplacer "\" par "\\" en java
- 29. Comment remplacer une virgule (,) avec un point en utilisant java
- 30. Changer la priorité du processus actuel en C
Commencez-vous un autre processus JVM? Si oui, de quelles inefficiences de mémoire vous inquiétez-vous? –
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