我想用Unix exec這個新的替換當前的Java進程。這裏已經有了一個similar question,但我更喜歡一個儘可能少使用內存的解決方案(accepted answer建議使用ClassLoader
,這可能導致內存泄漏;一個類似的簡單解決方案就是使用另一個進程來啓動正確的)。它肯定可以使用JNI以一種依賴於平臺的方式完成,我認爲我可以在Unix上完成它(而Unix的solution似乎已經存在),但我幾乎對相應的Windows API幾乎一無所知。我應該撥打哪些Windows功能?有沒有人已經做到了?如何使用JNA/JNI替換Windows中的當前Java進程?
回答
在Windows中,有很多子系統可以選擇在基本操作系統上運行,因此它有助於瞭解您的目標。例如,如果你可以使用C運行時庫,那麼你可以使用_exec()
系列的函數,它們和unix兄弟很相似。也許你可以使用這些修改jniexec來使用windows。
你寫過「如果你可以使用C運行庫」 - 我應該怎麼知道?如果我想在您的計算機上運行我的應用程序(運行Windows XP,Vista或7;我不在乎舊版或異形版),該怎麼辦? AFAIK,用JNI我需要打包一個包含調用'_exec'的小DLL,還有更多? – maaartinus 2011-03-27 16:33:31
我不是所有可以獲得C運行時庫的專家。當然,一種方法是使用Visual Studio來構建庫。 [Wikipedia](https://secure.wikimedia.org/wikipedia/en/wiki/Microsoft_Windows_library_files#Msvcrt.dll)在這個主題上有一些話。 – 2011-03-27 17:22:47
Windows中_exec()的行爲與POSIX API的行爲非常不同。最值得注意的是,它不會重用相同的PID,所以父進程會認爲子進程已經終止。 – 2011-05-22 23:23:51
Win32 API不包含'exec'的概念。 POSIX API的確如此。低級別的WinNT API具有構建塊,但使用它們相當複雜,並且至少在過去,需要求助於未公開的功能。
- 1. 替換當前進程
- 2. 用調用子進程替換當前進程?
- 3. 如何替換當前的Java進程,就像unix風格的exec?
- 4. java執行進程替換
- 5. 如何替換當前的CALayer
- 6. 如何用java替換進行打印?
- 7. 如何獲取Windows中當前進程的所有子進程的句柄?
- 8. 如何在Perl的system()中使用shell的進程替換?
- 9. 如何刪除/替換當前正在使用的字體
- 10. 如何使用javascript替換當前文檔URL的文本
- 11. 當前版本的msysgit是否支持進程替換?
- 12. 如何確定當前進程中COM使用的內部HWND?
- 13. 如何用過渡替換Silverlight/WP7中的當前控件?
- 14. 如何使用webdeploy在當前日期替換web.config設置?
- 15. 如何獲得Windows進程當前的音頻輸出級別?
- 16. 如何從Windows Powershell調用Java進程?
- 17. 替換當前Windows用戶與其他用戶運行EXE
- 18. 如何在Erlang shell中獲取當前進程的進程ID?
- 19. 進程替換
- 20. 替換{在java中使用「」,?
- 21. 在Windows中,如何用`new`替換`GlobalAlloc`?
- 22. 用CSS替換當前的html圖像
- 23. 如何用舊的替換當前的svn版本的分支?
- 24. 如何在Windows 7中使用win32查找當前Windows主題
- 25. 如何在Windows Phone中繪製(替換爲Java中的圖形)
- 26. 如何用Java替換XML?
- 27. 如何在Java中替換「./」?
- 28. 如何在java中打開文件之前等待windows進程完成之前
- 29. 如何使庫在java中可替換?
- 30. startLeScan替換爲當前api
您是否正在啓動另一個JVM進程?如果是這樣,你擔心什麼內存效率低下? – 2011-03-27 15:46:39
使用Unix exec解決所有問題;關於內存消耗的評論涉及純Java解決方案。 – maaartinus 2011-03-27 15:56:55