2012-05-03 2 views
6

나는 자바 Runtime.exec() 메서드를 사용하여 박쥐 파일을 실행합니다. jar를 실행하는 코드를 작성했습니다.이 jar에는 메시지가 발견되면 무한 시간을 풀링하는 스레드 클래스가 포함되어 있습니다. , 프로세스가 무한하게 실행된다는 것을 의미합니다. 내가 자바 코드를 사용하여이 프로세스를 죽이고 싶다. 또한이 메소드가 리눅스 OS에서 스크립트를 실행할 수 있는지 알고 싶다.java를 사용하여 실행중인 프로세스를 종료하는 방법은 무엇입니까?

**Used java code** 

String myCMD = "cmd.exe /C start c:\\elasticmgmtservice.bat"; 
Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec(myCMD); 

**used batch file** 

cd c: 
cd ElasticMgmtService\ 
java -jar ElasticIndexManagementService.jar config\ElasticIndexManagementService.xml 

이 문제를 해결하는 데 도움을 주시기 바랍니다.

+0

으로 넘길 수 있습니다. Linux에서 배치 파일을 실행할 수 없으며 특정 버전을 제공하거나 Java로 배치를 다시 작성할 수 없습니다! 프로세스를 죽이려면 http://stackoverflow.com/questions/6356340/killing-a-process-using-java를보십시오. –

답변

2

Runtime.exec의 (...)에서 윈도우

에서
Runtime rt = Runtime.getRuntime(); 
rt.exec("taskkill " +<Your process>); 

Process.destroy();

+0

나는 destroy() 메소드를 시도했지만 명령 프롬프트 (프로세스)를 닫지 않습니다. 문자열 myCMD = "cmd.exe/C start c : \\ elasticmgmtservice.bat"; 런타임 rt = Runtime.getRuntime(); 프로세스 proc = rt.exec (myCMD); proc.destroy(); –

+0

@sam - 'cmd.exe/C start mspaint.exe'가 destroy()로 잘 작동하는지 확인했습니다. 사실 그 방법을 파괴하는 반응을 보이지 않는 프로세스가 있습니다. 그것은 더 나은 'taskkill'또는 'kill'으로 닫는 것이 좋습니다. –

+0

@ Quoi- destroy 메소드와 'taskkill'또는 'kill'을 사용하여 다음 코드를 실행하면 반응이 없습니다. 프로세스 목록에서 수동으로 kill하려고 할 때 프로세스를 죽이지 않는다는 것을 의미합니다. 이 프로세스를 수동으로 종료합니다. 성공적으로 종료되었습니다. 무슨 일이 일어나는지 이해하지 못했습니다. 어떤 아이디어라도 있으면 알려주세요. –

0

Runtime.exec()은 exec 메소드가 작성한 프로세스의 핸들러 인 Process 오브젝트를 리턴합니다. 이 프로세스를 종료하려면, 리눅스

Runtime rt = Runtime.getRuntime(); 
rt.exec("kill -9 " +<Your process>); 
2

를 호출 할 필요는 다음과 같은 방법을 구성 Process 객체를 반환

  • destroy()
  • exitValue()
  • getErrorStream()
  • 는 getInputStream()
  • 로 getOutputStream()
  • WAITFOR()

당신은 하위 프로세스를 죽이고) (파괴 호출 할 수 있습니다. 이 Process 객체가 나타내는 하위 프로세스는 강제 종료됩니다. taskkill /PID <process id>Runtime.exec(...) 또는 kill -9 <process id>

+0

이것은 끔찍한 생각처럼 보입니다. Process # destroy()를 사용하는 것이 훨씬 더 바람직합니다. – dantiston

관련 문제