프로그래밍언어/자바

[자바 도전기] 프로세스(PS) 프로그램

놀고싶다~ 2021. 4. 8. 12:44

안녕하세요! 오늘은 명령프롬프트(CMD)에 사용되는 프로세스 조회 , 검색등을 사용 해보는 프로그램을 만들어 보고자 합니다.

 

오늘 구현해볼 기능은 아래와 같습니다.

 

1. 프로세스 목록
2. 프로세스 이름 검색
3. PID 프로세스 검색
4. 프로세스 이름으로 종료
5. PID 프로세스 종료

 

먼저 명령프롬프트에서 사용 할 수 있는 화면을 예시로 보여드리겠습니다!

 

 

 

이후에 JAVA로 구현하여 기능들에 대한 코드 및 결과 화면을 살펴보겠습니다.

 

package com.i2sec;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Ps ps = new Ps();
		
		int ch = 0;
		int name = 0;
		String name1;
		String pid = null;
		
		
		Scanner src = new Scanner(System.in);
		
		System.out.println("1. 프로세스 목록");
		System.out.println("2. 프로세스 이름 검색");
		System.out.println("3. PID 프로세스 검색");
		System.out.println("4. 프로세스 이름으로 종료");
		System.out.println("5. PID 프로세스 종료");
		
		
		ch = src.nextInt();
		src.nextLine();
		
		switch (ch) {
		case 1:
			ps.searchALL();
			break;
			
		case 2:
			ps.searchALL();
			System.out.println("검색할 프로그램을 입력하세요");
			name1 = src.nextLine();
			ps.search(name1);
			break;
			
		case 3:
			ps.searchALL();
			System.out.println("검색할 프로그램을 입력하세요");
			ps.name = src.nextInt();
			ps.search(name);
			break;
			
		case 4:
			ps.searchALL();
			System.out.println("종료할 프로그램을 입력하세요");
			pid = src.nextLine();
			ps.kill(pid);
			break;
			
		case 5:
			ps.searchALL();
			System.out.println("종료할 프로그램을 입력하세요");
			pid = src.nextLine();
			ps.kill(pid);
			break;
		
		}
		
		
		
	}
	
}

 

MAIN 화면 입니다.

 

package com.i2sec;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Scanner;

public class Ps {
	
	private static final int String = 0;


	// 오버로딩을 사용하기
	// 숫자를 문자열로 바꾸도록 하기(int to string)
	// 다른 명령어로 못바꾸도록 private 설정(tasklist 할 때)
	
	int name;

	
	public void search() {
		this.name = name;
		
	}
	
	@Override
	public String toString() {
	 
	return Integer.toString(name);
	}
	
	
	
	void searchALL() {
		
		String cmd = "tasklist";
		String str;
		
		try {
			Process ps = new ProcessBuilder(cmd).start();
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader bufread = new BufferedReader(in);
			
			str = bufread.readLine();
			
			while(str != null) {
				System.out.println(str);
				str = bufread.readLine();
			}
			in.close();
			bufread.close();
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
		
	}
	
	public void search(String name) {
		
		String str;
		
		try {
			
			ArrayList<String> cmd = new ArrayList<String>();
			cmd.add("tasklist");
			cmd.add("/FI");
			cmd.add("IMAGENAME eq "+name);
			cmd.add("/SVC");
			cmd.add("/FO");
			cmd.add("csv");
			
			Process ps = new ProcessBuilder(cmd).start();
			
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader bufread = new BufferedReader(in);
			
			str = bufread.readLine();
			
			while(str != null) {
				System.out.println(str);
				str = bufread.readLine();
			}
			in.close();
			bufread.close();
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
	}
	
	public void search(int name) {
		
		String str;
		
		try {
			
			ArrayList<String> cmd = new ArrayList<String>();
			cmd.add("tasklist");
			cmd.add("/FI");
			cmd.add("PID eq "+this.name);
			cmd.add("/SVC");
			cmd.add("/FO");
			cmd.add("csv");
		
			Process ps = new ProcessBuilder(cmd).start();
			
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader bufread = new BufferedReader(in);
			
			str = bufread.readLine();
			
			while(str != null) {
				System.out.println(str);
				str = bufread.readLine();
			}
			in.close();
			bufread.close();
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
		
	}
	
	public void kill(String pid) {
		
		String str;
		
		try {
			
			ArrayList<String> cmd = new ArrayList<String>();
			cmd.add("taskkill");
			cmd.add("/F");
			cmd.add("/PID");
			cmd.add(pid);
			
			Process ps = new ProcessBuilder(cmd).start();
			
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader bufread = new BufferedReader(in);
			
			str = bufread.readLine();
			
			while(str != null) {
				System.out.println(str);
				str = bufread.readLine();
			}
			in.close();
			bufread.close();
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
	}
	
	public void kill(int pid) {
		
		String str;
		
		try {
			
			ArrayList<String> cmd = new ArrayList<String>();
			cmd.add("taskkill");
			cmd.add("/PID" + pid);
		
			
			Process ps = new ProcessBuilder(cmd).start();
			
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader bufread = new BufferedReader(in);
			
			str = bufread.readLine();
			
			while(str != null) {
				System.out.println(str);
				str = bufread.readLine();
			}
			in.close();
			bufread.close();
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}
	}
		
		
		// kill
	}

	

프로세스 구현 코드 입니다.

 

실행 하였을 때 결과 화면입니다.

 

 

자바로 코드를 실행 하였을 때 실행되는 것을 확인 할 수 있었습니다.

 

이상으로 프로세스 코드 구현을 마무리 하겠습니다!