2009-12-04 5 views
0

Process 클래스를 통해 C# app에서 일부 배치 파일을 시작합니다. 이 파일은 자바 응용 프로그램을 시작했습니다. 이 응용 프로그램을 중지하려면 java.exe라는 프로세스를 kill해야합니다. 그 (것)들을 전부 죽이기보다는 몇몇 더 우아한 방법 있는가, 나가 맞은 것을 끝내고 다른 중요한 자바 app를 죽이지 않는다는 것을 희망한다? 제가 정말로 거기에 붙어있는 도움을 주셔서 감사합니다.살인 프로세스 java.exe

건배, 앤드류

+0

Java.app와 C# 응용 프로그램간에 OS가 부모 - 자식 관계를 유지해야합니다. 당신이 창문에 있다고 생각하니? 왜이 Java 프로세스를 죽이려고합니까? –

+0

예 Iam on windows. Java 프로세스는 C# 응용 프로그램에서 사용자가 시작합니다. 그를 위해 계산을합니다. 사용자가 계산을 멈추기로 결정했다면 자바 애플리케이션을 죽여야한다. 왜냐하면 엄청난 양의 데이터를 처리하기 때문에 시간이 많이 걸리기 때문이다. 감사. 나는 그것을 테스트 할 부모 - 자식 관계의 유지를 발견했다. – Andrew

답변

2

편집 : 나는 배치 파일 부분을 놓쳤다. 이 대답은 C#에서 직접 프로세스를 시작할 수있는 경우에만 유용합니다 ...

프로세스를 시작할 때 프로세스 ID를 저장할 수 있으므로 프로세스를 나중에 다시 가져올 수 있습니다.

Process p = new Process(); 
//set all the process start Info... 
p.Start(); 

someVariableICanGetToLater = p.Id 

//Later when you need to kill the process... 
Process pToKill = Process.GetProcessById(someVariableICanGetToLater); 
pToKill.Kill(); 
+0

그는 Java 프로세스가 시작되고 있다는 것을 알지 못해서 코드가 어디에 있는지를 알지 못하거나 소스를 사용할 수 없을 수도 있습니다. –

0

배치 파일이 Java 응용 프로그램을 시작하기 때문에 배치 파일 프로세스의 ID를 알면 도움이되지 않는다고 가정합니다.

Process.GetProcessesByName("java")은 모든 java.exe 인스턴스의 목록을 제공합니다.

+0

그는 C# 응용 프로그램과 자바 프로세스 사이의 부모 자식 관계를 쿼리해야합니다. 이 코드를 게시 할 수 있습니까? : P –

0

의사 코드. 여기에 OS 특정 호출을 입력하십시오 :

int cs_pid=getProcessByName("CSharpAppName"); 
int javaPid[]= getProcessByName("JavaAppName"); 

bool javaToCSharpRelationship[]=new bool[javaPid.size]; 

int loopCounter=0; 

forEach int in javaPid 
begin 
     if(isChildOf(cs_pid,java_pid)) 
     begin 
     // OS call or Wrapper to determine relationship between c# pid 
     // and Java app PID 
     javaToCSharpRelationShip[loopCounter]=true; 
     //can call kill here if you like 
     end 
     else 
     javaToCSharpRelationShip[loopCounter]=false; 
    loopCounter++; 
end 

이 코드의 끝에서 C# 응용 프로그램의 자식 인 배열을 가져야합니다. 배치 파일이 일을 많이하지 않는

+0

안녕, 정말 재미있어 보여. isChildOf 메서드에 몇 가지 힌트를 줄 수 있습니까? – Andrew

0

만 .NET의 ProcessProcessStartInfo 클래스를 사용하여 달성하기 어려운 또 다른 옵션은 직접 java.exe를 시작하고 ProcessStartInfoArgumentsEnvironmentVariables 속성을 통해 인수와 환경 변수를 제어하는 ​​것 .

그런 다음 Jason의 접근 방식을 사용하여 java.exe 프로세스 'id를 저장하여 나중에 죽일 수 있습니다.

관련 문제