2013-10-11 2 views
0

Amazon EC2 인스턴스를 사용하여 AWS Java SDK를 사용하여 복잡한 계산을 수행 할 때가끔 이러한 계산이 오래 걸릴 수 있습니다. 따라서 Java 코드에서 EC2 인스턴스에서 원격으로 실행중인 프로세스를 종료해야 인스턴스를 중지하고 시작할 필요없이 다른 인스턴스에 동일한 인스턴스를 재사용 할 수 있습니다.amazon EC2 Linux 인스턴스에서 프로세스를 원격으로 종료하는 방법

중지와 시작의 문제는 Amazon이 부분 시간을 완전한 시간으로 처리한다는 것입니다. 따라서 제 목표는 코드를보다 비용 효율적으로 만드는 것입니다.

SSH를 사용하여 EC2 인스턴스에 연결하면 명령이 실행되는 방식입니다. SSH 연결을 끊고 다시 연결하면 어떤 프로세스가 실행되고 있는지를 알 수 없습니다.

간단히 말해, 내가 필요로하는 것은 Ctrl + C를 사용하지 않고 Java 코드 내에서 (사용자 개입없이) 수행하는 것입니다. 그게 가능하니?

편집 : 명확히하기 위해 계산은 Linux EC2 인스턴스에 설치된 별도의 도구로 실행됩니다. 따라서이 도구를 시작하기위한 명령을 전달하면 명령 행은 완료 될 때까지 기다렸다가 결과를 보여줍니다. 수동 사용 시나리오에서는 Linux 명령 행에서 Ctrl + C를 눌러 명령 행을 다시 제어 할 수 있습니다. 하지만 제 경우에는 가능하면 자바 코드와 비슷한 것을하고 싶습니다.

+0

이것은 가능한 중복이며 문제를 해결할 것입니다. http://stackoverflow.com/questions/6356340/killing-a-process-using-java – gimg1

답변

0

SIGAR library을 사용하여 시스템의 프로세스 목록을 스캔하고 프로세스를 종료하십시오. 모든 프로세스 ID를 얻을 수

사용 getProcList()getProcArgs() 각 프로세스의 전체 명령 줄을 얻기 위해, 그리고 kill() 관련 프로세스 나 프로세스를 종료 할 수 있습니다.

그래서 작업이 실행 중이고 그것을 죽이고 싶다면 SSH를 다시 ​​컴퓨터에 넣고 SIGAR 기반 프로세스 킬러를 실행하십시오.

0

더러운/기능적인 방법은 SSH를 통해 프로세스를 종료하고 실행하는 데 Java Runtime을 사용하는 것입니다.

뭔가 귀하의 경우 그래서

Runtime runtime = Runtime.getRuntime(); 
Process p = runtime.exec("ssh [email protected] command"); 

,

같은 경우 (예 : 1234) 프로그램의 PID 알고있는 경우 :

Process p = runtime.exec("ssh [email protected] pkill my_program_name_x64"); 
:

Process p = runtime.exec("ssh [email protected] kill 1234"); 

또는 당신은 프로그램의 이름을 알고있는 경우

일반적으로 런타임을 통해 호출되는 실행 파일에 절대 경로를 지정해야합니다.

그래서 당신은 /bin/ssh 또는 /usr/bin/ssh처럼뿐만 아니라 killpkill 또는 killall 위해 뭔가에 의해 SSH를 교체해야합니다.

관련 문제