일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- object
- methodArea
- hashCode
- Polymorphism
- override
- start()
- reference
- 객체형변환
- 추상클래스
- fuction
- Hashtable
- abstractclass
- Vector
- 생성자
- eclipse
- class
- hamobee
- concreteclass
- run()
- constantnumber
- garbagecollection
- super
- 콘크리트클래스
- arguments
- string
- MSA
- overload
- ALTER
- Eureka
- value
- Today
- Total
뇌운동일지
[JAVA] java에서 shell command 호출 본문
원하는 것
1. 파라미터로 shell command 받아오기
2. 리턴값으로 command 결과 반환
3. 실행 경로 지정
4. 잘못된 shell command 입력 시, 에러메시지를 리턴해줄 것
예제1)
www.hanumoka.net/2020/07/01/java-20200701-java-shell-command/
Runtime 클래스와 ProcessBuilder 를 쓰는 방법 두가지가 있다.
ProcessBuilder 사용을 선택.
( 이 예제에서 Consumer<T> 쓰는 것을 명확히 이해하지 못함. )
-> 이 방법에서 입력을 인자값으로 받아오고, 출력을 return 값으로 반환하도록 처리하고자 했다.
그래서 아래의 내용을 찾아보았다.
BufferedReader to String
stackoverflow.com/questions/15040504/how-to-easily-convert-a-bufferedreader-to-a-string
Thread 클래스 VS Runnable 인터페이스 : 전에 공부한 적이 있는데 까먹은 내용, 다음에 다시 살펴보자.
자바에서 다중상속을 지원하지 않는 것과 관련이 있었던 것이 기억난다.
threadpool 작업완료 시, return 하고 싶을 때 : run() 메소드는 return 값이 없다. 이것을 우회하여 처리결과를 return하고 싶어서 찾아본 내용.
리턴값을 반환하는 방법을 찾아보다가 Runnable 과 Callable 을 찾아봄
스레드 풀에 대해 알아보게 됨.
공유객체를 생성하여 Runnable 의 리턴값을 만드려는 방법에서 Callable 인터페이스를 사용하는 방법으로 바꾸기로 결정.
ProcessBuilder 활용하여 java로 shell script 실행하는 예제 : 여기서는 thread pool 을 사용하지 않음. [예제1]과 접목하여 내가 이해할 수 있게 만들어보려고 함.
-> 이 방법 성공해서 이쁘게 HashMap에 담겨서 return 됨. MS-949로 인코딩
Quest2) 잘못된 명령어 입력 시, 오류메시지를 리턴해주도록 만들고자 했다.
java로 shell command를 구현하기 위해서는 shell script 에 대한 개념을 속성으로 머리에 넣을 필요가 있었다.
Shell Script 쉘에서 사용할 수 있는 명령어 조합을 모아 만든 배치 파일 리눅스에서는 여러 명령어들을 pipe, redirection, filter 등으로 연결하여 원하는 결과를 만들 수 있다. 이렇게 묶여진 명령어 조합 반복 사용하는 것이 쉘 스크립트. 쉘 스크립트 : 명령어 조합을 단일 명령어로 만들어 쉽게 사용하는 것 shell : 운영체제의 커널과 사용자 사이를 이어주는 역할. shell은 사용자의 명령어 해석, 운영체제가 알아듣도록 지시. 운영체제는 shell에게서 받은 지시를 해석하여 하드웨어를 위한 지시어로 바꾸어줌. Script : Interpreter 에 의해 해석/실행되는 프로그램 |
ProcessBuilder 클래스 : 운영체제 프로세스 생성 시 사용 (JDK 7 이상)
Runtime.exec() 의 경우, 표준 입력과 출력에서 제한된 버퍼 사이즈로 인해 하위 프로세스가 block 또는 데드락되는 문제가 있다.
start() : 입력받은 커맨드 실행에 새로운 프로세스 생성
Process 클래스 : 실행하고자 하는 응용프로그램을 위한 프로세스 관리
waitFor() 자식 프로세스가 종료될 때까지 기다림
destroy() 부모 프로세스에서 자식 프로세스 강제 종료
해보면서 알게된 것
Process 클래스 사용을 위해 Runtime 클래스를 사용할 것인지, ProcessBuilder 클래스를 사용할 것인지를 결정해야함.
'JAVA' 카테고리의 다른 글
[JAVA] main method (0) | 2021.03.29 |
---|---|
[JAVA17_(1)] this. 활용 (0) | 2020.06.09 |
[JAVA26] ActionListener / WindowListener (0) | 2020.04.02 |
[JAVA25] sql (0) | 2020.04.01 |
[JAVA24] JAVA package 간단한 설명 (0) | 2020.03.31 |