본문으로 바로가기
반응형
Java에서 Linux 명령을 실행하려면 Runtime.exec()를 사용할 수 있습니다. 그러나 Runtime.exec()는 단순한 명령만 실행할 수 있으며, 파이프라인(|), 리다이렉션(>, <), 와일드카드(*, ?), 백그라운드 실행(&), 그룹 명령((), {}) 등의 쉘 기능을 사용할 수 없습니다.

이 경우, ps -ef 명령을 통해 실행중인 프로세스를 조회하고, 각 프로세스 정보를 분석하여 특정 프로세스의 자식 프로세스 ID를 찾는 것이 필요합니다. 그러나 이것은 쉘 스크립트에서 가능한 복잡한 작업입니다. Java에서는 이러한 작업을 수행하는 데 더 많은 코드가 필요합니다.

아래의 코드는 이런 작업을 수행하는 예시입니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
public static void main(String[] args) {
String parentProcessId = "12345"; // replace with actual parent process id
getChildProcessId(parentProcessId);
}

public static void getChildProcessId(String parentProcessId) {
String command = "ps -ef";
try {
Process process = Runtime.getRuntime().exec(command);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

String line;
while ((line = reader.readLine()) != null) {
String[] splitLine = line.split("\\s+");
if (splitLine[2].equals(parentProcessId)) {
System.out.println("Child process ID of parent process " + parentProcessId + " : " + splitLine[1]);
}
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

반응형


위 코드에서 ps -ef 명령을 실행한 뒤 결과를 한 줄씩 읽어서 부모 프로세스 ID가 일치하는 경우 해당 프로세스 ID(자식 프로세스 ID)를 출력하게 됩니다. 위 코드는 단지 한 가지 방법일 뿐, 실제 구현 시에는 보다 정교한 예외 처리, 에러 처리, 멀티스레드 처리 등이 필요할 수 있습니다.Random Photo

반응형