2011-03-11 122 views
0

有沒有辦法使用java來檢測哪些應用程序在計算機上運行?我的意思是如果我運行瀏覽器,辦公應用程序和Windows資源管理器,我可以使用java來檢測這些和找到他們運行多久了?查找在計算機上運行的應用程序

+0

這似乎是一個安全威脅。如果你有管理員憑證,你可能會做到,但你到底在做什麼? – 2011-03-11 05:03:20

+0

我正在嘗試創建一個桌面應用程序來跟蹤我使用的應用程序 – markjason72 2011-03-11 11:32:37

回答

0

有沒有純粹的Java方式來做到這一點。

最簡單的方法是使用Runtime.exec(...)來運行外部命令,以列出當前正在運行的命令的信息,然後取消生成的輸出流。您運行的命令(及其參數)和結果流的格式將與平臺相關。

@Jigar建議使用Linux的「ps」命令和Windows的「wmic」命令。 @Mahesh在Linux上提出了「頂級」,但是並沒有顯示所有的應用程序......並且它的輸出並不是真正爲此設計的。 Windows上的另一種可能性是「tasklist」;請參閱@ Jigar的鏈接頁面。

另一個問題是決定什麼構成應用程序......爲您的列表的目的。例如,「ps」和「top」不區分不同種類的過程。 (至於Linux操作系統而言,有沒有真正的區別...)


最後,它很可能是一個壞主意做這樣的是你的機器之外暴露在服務的事情;例如在一個Servlet或JSP中。讓其他人看到服務器上正在運行的是可能存在的安全風險。

+0

tasklist.exe可以列出進程。如何僅篩選運行的應用程序,如應用程序選項卡中所示taskmanager在windows?(不是進程) – markjason72 2011-03-11 15:31:51

2

執行以下從Java

Linux的命令:

ps aux | less 

的Windows:

wmic process get description,executablepath 

另請參見

0

使用的Runtime.exec方法來運行任何shell命令會得到你想要的信息之一。

+0

錯誤地,我編輯了您的帖子。抱歉。 – Mahesh 2011-03-11 05:10:59

+0

@Mahesh - 不用擔心。也許你可以回滾你的編輯並獲得清理徽章。 :) – 2011-03-11 05:42:21

0

如果您在Linux機器上運行,則top調用會告訴您在系統上運行進程。所以,你可以對它進行系統調用。

Runtime r = Runtime.getRuntime(); 
r.exec("top"); // The returned stream needs to be collected. 
+0

http://javaevangelist.blogspot.com/2008/08/making-system-call-in-java.html – Mahesh 2011-03-11 05:13:39

相關問題