2가지로 나눌수있는데 Runtime.getRuntime().exec() 이용해서 VB Script를 이용하던지
프로세스 정보를 출력하는 OS 에서 제공하는 tasklist.exe 유틸을 이용한다
원도우에서 돌아가는 프로세스 목록을 자바에서는 알수가 없다.
그래서 OS 에서 제공하는 유틸을 실행시켜 그 정보를 리턴받아 쓰면된다.
그 이름이 tasklist.exe 이다. 보통 윈도우 OS 에 System32 에 포함되어있기
때문에 따로 받을 필요가 없지만 만약 존재하지 않을경우 다음의 주소에서
받으면 된다.
http://www.computerhope.com/download/winxp.htm
tasklist.exe 를 실행한 화면이다. 현재 실행중인 프로세스에 대한 정보들을 볼수있다
첫번쨰 소스는tasklist.exe 를 이용해서 현재 윈도우에 실행중인 프로세스 정보를 알아오는것이다
Runtime.getRuntiom().exec 를 사용해서 유틸을 실행시킨후 그 프로세스와 연결한
통로를 통해 위의 그림에서 처럼 표현된 정보들을 스트림으로 받게 된다.
받은 스트림정보를 해석해서 적절하게 이용하면된다.
그 내용에 대한 소스이다. javax.swing.JOptionPane 를 사용해서 결과값을 GUI로 표현 했다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class WindowsUtils {
public static List listRunningProcesses(){
List processes = new ArrayList();
try{
String line;
Process p = Runtime.getRuntime().exec("tasklist.exe /nh");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((line = input.readLine()) != null){
if (!line.trim().equals("")){
// keep only the proecess name
processes.add(line.substring(0, line.indexOf(" ")));
}
}
}catch (Exception e){
e.printStackTrace();
}
return processes;
}
public static void main(String[] args){
List processes = listRunningProcesses();
String result = "";
// display the result
Iterator it = processes.iterator();
int i = 0;
while (it.hasNext()){
result += it.next() + ",";
i++;
if (i == 10){
result += "\n";
i = 0;
}
}
msgBox("Running processes : " + result);
}
public static void msgBox(String msg){
javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)null,
msg, "WindowsUtils", javax.swing.JOptionPane.DEFAULT_OPTION);
}
}
실행 화면
두번째는 VB Script 로 실행해서 값을 얻어오는 방법이다
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.*;
public class VBSUtils {
private VBSUtils() { }
public static List<String> listRunningProcesses() {
List<String> processList = new ArrayList<String>();
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\n"
+ "Set locator = CreateObject(\"WbemScripting.SWbemLocator\")\n"
+ "Set service = locator.ConnectServer()\n"
+ "Set processes = service.ExecQuery _\n"
+ " (\"select name from Win32_Process\")\n"
+ "For Each process in processes\n"
+ "wscript.echo process.Name \n"
+ "Next\n"
+ "Set WSHShell = Nothing\n";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
processList.add(line);
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return processList;
}
public static void main(String[] args){
List<String> processes = VBSUtils.listRunningProcesses();
String result = "";
Iterator<String> it = processes.iterator();
int i = 0;
while (it.hasNext()) {
result += it.next() +",";
i++;
if (i==10) {
result += "\n";
i = 0;
}
}
msgBox("Running processes : " + result);
}
public static void msgBox(String msg) {
javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
null, msg, "VBSUtils", javax.swing.JOptionPane.DEFAULT_OPTION);
}
}
실행화면이다 위와 동일하다.
'자바(JAVA)' 카테고리의 다른 글
SOAP 통신에서 weblogic parsing error - jar 의 충돌 (0) | 2009.05.28 |
---|---|
apache 에서 제공하는 Common Validator 사용하기 (1) | 2009.05.27 |
spring framework 적용하여 controller 에서 error stacktrace 에러 내용이 찍히지 않을때 (0) | 2009.05.26 |
Locale format 정보을 이용해서 Date outputs 를 원하는 형태로 만들어보자 (0) | 2009.05.19 |
log4j.additivity 옵션으로 중복출력 제외 시키기 (0) | 2009.02.21 |
메시지 규칙에 의해서 특정문자를 다른변수에 저장된 메시지로 치환하고 싶을때 (0) | 2009.02.21 |
원하는 위치의 문자열을 다른것으로 바꾸고 싶을때(치환) 간단 로직 (0) | 2009.02.21 |
소숫점 이하를 버리는 방식 2가지 (0) | 2009.02.19 |