簡體   English   中英

如何以編程方式從另一個程序中關閉Windows中運行的SPECIFIC Java應用程序?

[英]How can I programatically close a SPECIFIC java application running in windows from within another program?

我需要(強制)從另一個程序中關閉特定的Java應用程序。 對於任何殺死本機程序的進程,或將vm_close發送到其主窗口通常有效,但對於在Windows上運行的Java應用程序則無濟於事。 請注意,Java應用程序僅在正常狀態下顯示托盤圖標,並且沒有打開的窗口。

如果您知道Java程序的PID,請使用以下命令:

Runtime.getRuntime().exec("taskkill /F /PID bla");

bla是程序的PID。

/F參數將強行殺死應用程序,我看不出Java程序與其他程序有什么不同並能夠幸免的原因。

請注意,此代碼顯然是Windows特定的。 如果您希望它具有可移植性,則應首先通過使用以下命令找出托管應用程序的操作系統

System.getProperty("os.name")

然后,如果您使用的是Windows,請使用taskkill /F如果您使用的是* nix系統,請使用kill -9如果您使用的是更特殊的平台,請使用其他命令。

更新 :為了全面了解所有正在運行的流程,我建議使用Process Explorer 如果需要命令行進程列表器,請使用PsList

如果要終止特定的Java程序,則可能會出現問題,因為默認情況下,每個Java進程都名為java.exejavaw.exe

使用PsList,您可以以編程方式掃描以java開頭的所有進程,然后與jps結合使用,您將獲得有關您真正想要殺死的內容的更多信息。

一個簡單的技巧是復制/粘貼java.exe(或javaw.exe)的第二個版本,將其稱為java_alt.exe,然后使用Windows的Unix工具以新名稱殺死該進程。

如果您在已知位置將Java應用程序的進程ID寫入臨時文件該怎么辦。 程序啟動時,請執行以下操作:


//mark the instance file for delete
String instanceFileLocation = System.getProperty("java.io.tmpdir") + File.separator + "instances.dat";
File PIDFile = new File(instanceFileLocation).deleteOnExit();
//write the process id here

然后,任何程序或應用程序都可以找到臨時文件和特定的進程ID。 使用發布的其他解決方案將其殺死。

然后使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM