2012-02-13 2 views
2

Java 응용 프로그램을 다시 시작하기위한 로그 파일 감시자 C# 서비스를 개발하려고합니다.C# 서비스에서 Java 응용 프로그램을 종료하는 방법

이 Java 응용 프로그램은 특수한 통신 프로그램을 실행하고 수집 된 데이터를 로그 파일에 기록합니다. 현재 배치 파일 스크립트로 시작됩니다.

내 C# 서비스에서 로그 파일이 새 데이터로 업데이트되는지 여부를 모니터링하고 싶습니다. 새 데이터를 얻지 못하면 Java 응용 프로그램을 다시 시작하고 싶습니다.

C# 응용 프로그램에서 일괄 처리 스크립트를 호출하고 파일이 수정되면 온라인으로 자료를 찾았지만 C# 응용 프로그램을 사용하여 현재 실행중인 Java 프로그램을 종료하는 방법이 있는지 궁금합니다. Java 프로그램 이름은 javaw.exe이지만이 시스템에서 실행중인 다른 Java 프로그램이므로 고유하지 않습니다. 누구든지이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

+1

PowerShell – McKay

답변

4

jps -v는 Java에서 사용되는 프로세스를 자세히 설명하는 Java 명령입니다. C#을 통해이 호출을하고 정보를 문자열로 전달하면이 프로세스를 통해 정렬하고 어떤 프로세스를 죽일지를 정확하게 결정할 수 있습니다.

당신과 같이 출력에 걸릴 수 :이 후

 ProcessStartInfo psi = new ProcessStartInfo("jps", "-v"); 
     psi.RedirectStandardOutput = true; 
     psi.UseShellExecute = false; 
     Process p = new Process(); 
     p.StartInfo = psi; 
     p.Start(); 
     string[] output = p.StandardOutput.ReadToEnd().Split("\n".ToCharArray()); 

을 쉽게 실행중인 Java 프로세스의 프로세스 ID와 이름을 구문 분석 할 수 있습니다.

+0

기계에 Java SDK가 설치되어 있다고 가정합니다. SDK가 아닌 JRE 만 설치된 시스템에서 응용 프로그램을 실행할 경우 해당 프로세스의 호출은 파일이 누락되어 작동하지 않습니다. 배포를 계획하는 경우 응용 프로그램에 필요한 SDK 파일을 포함 할 수 있습니다. 그러나 가이드 라인에서 그렇게하기 전에 EULA for Java를 읽으십시오. – Moiz

2

정상적으로 프로그램을 종료하는 방법, 즉 정중하게 프로그램 종료를 요구하는 신호를 보내는 것이 좋습니다. 당신이 순수한 자바 환경에 있다면 JMX를 사용하는 것이 좋겠지 만 워치 독이 C#이므로 일반 TCP 소켓을 사용하여 신호를 보낼 수있다. 자바 프로그램을 수정하여 그러한 신호를 수신 할 수 있다면이 방법이 좋다.

모든 프로세스를 사용하면 killtask 명령 또는 C# API를 사용하여 PID로 식별 된 프로세스를 종료 할 수 있습니다. Windows에서 실행중인 Java 프로세스의 PID를 찾는 것은 쉬운 일이 아닙니다. 그러나 모든 자바 프로세스를 주 클래스 이름과 인수로 인쇄하는 명령 jps을 사용할 수 있습니다. C# 프로그램에서 java -Dmyid=1234 MyClass arg1 arg2

스토어 1234 (대한 myid) :

당신은 -D 옵션을 사용하여 자바 프로그램에 특별한 식별자를 전달할 수 있습니다. 그런 다음 자바 프로그램이 여전히 실행 중인지 여부를 확인하려면 jps을 실행하고 해당 출력을 구문 분석하고 -Dmyid=1234 매개 변수로 프로세스를 가져오고 jps에 의해 반환 된 PID를 가져 와서 프로세스를 종료합니다.

+0

그래서 고유 한 ID를 부여하기 위해 프로그램을 실행할 때 -DmyId 옵션을 사용할 수 있습니까? 내가 선택한 ID가 이미 존재하는 경우 다른 기존 ID에 대해 걱정해야합니까? launch4j 같은 솔루션을 사용하여 javaw.exe의 이름을 바꾸려고 생각하고 있었지만 프로세스 ID를 설정하는 것이 더 쉽다면 Java 프로그램에 종속성이 충분하기 때문에 선호합니다. [ini-4j 및 특별한 타사 통신 실험 계획안]. – user1207381

관련 문제