Java 스레드 : 동일한 JVM에서 실행되는 다른 Java 프로그램에서 특정 스레드를보기/일시 중지/킬이 가능합니까?

StackOverflow https://stackoverflow.com/questions/181615

  •  05-07-2019
  •  | 
  •  

문제

나는 다른 스레드, foot1, foot2, .. footn을 실행하는 프로그램 'foo'가 있습니다.

이제 실을 죽일 수있는 다른 프로그램 '바'를 쓰고 싶다면 가능합니까?

이유 : Thread Footr 중 하나는 제품 라이센스를 추적합니다. 이 실이 죽으면; 이 제품을 무기한으로 실행할 수 있습니다. 그리고 'foo'자체를 죽이는 것은 라이센스 만료에서 정확히 수행되는 일이기 때문에 'foo'로 견딜 수 있습니다.

시스템 : Linux의 Fedora 분포

참고 : JVM 및 프로그램 FOO를 시작하는 명령은 /etc/init.d에 배치되며 RC.1/RC.2/RC.3에 대한 알맞은 지식을 가진 사람이라면 누구나 시작 매개 변수를 변경/추가 할 수 있습니다.

내 질문이 분명하기를 바랍니다. 그렇지 않다면 항상 편집 할 수 있습니다.

도움이 되었습니까?

해결책

내 지식으로는 직접 수행 할 수 없습니다. 그러나 고려할 수있는 것은 'bar'에서 호출하여 실을 죽일 수있는 'foo'에 어떤 종류의 서비스를 만드는 것입니다. 물론 이것을 구현하는 수백 가지 방법이 있습니다. 나의 첫 번째 생각은 이것을 사용하는 것입니다 RMI.

다른 팁

실제로 Java 디버거를 사용하면 예외를 주입하여 실을 죽일 수 있습니다. 이 질문을 발견했을 때이 기능을 사용하여 JVM 전체를 닦지 않고 실을 죽이는 방법을 해결하려고 노력했습니다. 다음과 같은 명령 줄 옵션으로 JVM을 실행하는 경우

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 your.app.Main

디버거를 다음과 같은 것과 연결하십시오.

jdb -attach 127.0.0.1:8888

당신은 입력 할 수 있습니다 :

threads

실행 된 스레드 목록을 얻고 킬 명령을 사용하여 실행 스레드를 죽입니다. 내가 확실하지 않은 비트는이 킬 명령의 구문입니다. 나는 명백한 것을 시도했습니다.

kill 0xe2e new java.lang.IllegalArgumentException("er");

그리고 나는 메시지를 받는다 :

killing thread: Swank REPL Thread
Thread not suspended
Expression must evaluate to an object

( "Swank Repl Thread"는 내가 죽이고 싶은 스레드이며, 그렇습니다. 먼저 일시 중지하려고 시도했습니다.)

여전히 Java Debugger를 제쳐 놓을 수 없지만 실이 무작위로 죽일 수있는 것처럼 보입니다. 어쩌면 당신은 모든 예외를 무시하고 계속 달리기를 할 수있을 것입니다. 그것은 충분할 것입니다. 그러나 나는 그것에 대해 확실하지 않습니다.

별도의 응용 프로그램 없이도이 작업을 수행 할 수 있습니다. 응용 프로그램의 원래 시작 클래스에 매개 변수를 통과하는 자신의 시작 클래스를 작성하십시오. 그러나 클래스의 주요 방법은 모든 스레드의 목록을 정기적으로 확인하는 스레드를 만듭니다 (예 : Thread.getAllStackTraces 또는 Thread.enumerate), 불쾌한 실을 찾아서 호출합니다 stop() 그 위에. 하지만 Thread.stop 더 이상 사용되지 않으며 여전히 작동합니다.

또 다른 옵션은 Java 디버거 아래에 응용 프로그램을 실행하는 것입니다. jdb 그런 다음 필요한 스레드를 일시 중단/죽입니다. Application Startup에 매개 변수를 추가하여 JVM을 부착 한 다음 첨부 할 수 있습니다. jdb 실행중인 JVM에 그리고 스레드를 의심/죽입니다.

지금까지 동일한 JVM에서 다른 프로그램으로 실행할 수는 없지만 일부 사람들은 같은 기계에서 실행되는 다른 Java 프로그램의 메모리 및 CPU 사용을 줄이기 위해이를 조사하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top