Java线程:是否可以从同一JVM上运行的不同java程序查看/暂停/终止特定线程?

Swa*_*and 7 java multithreading jvm

我有一个运行不同线程的程序'foo',fooT1,fooT2,... fooTn.

现在,如果我想写另一个程序'bar',这可能会杀死线程fooTr,那可能吗?

原因:其中一个线程fooTr跟踪产品许可证.如果这个线程被杀死; 一个人可以无限期地运行这个产品.杀死'foo'本身是可以容忍的'foo',因为这正是许可证到期时所做的.

系统:Linux的Fedora发行版

注意:启动JVM和程序foo的命令放在/etc/init.d中,任何对rc.1/rc.2/rc.3结构有相当了解的人都可以更改/添加起始参数.

我希望我的问题很明确.如果没有,我总是可以编辑它.

l0s*_*t3d 13

实际上,java调试器将允许您通过向其中注入异常来终止线程.当我遇到这个问题时,我只是想弄清楚如何使用这个功能来杀死一个线程而不会消灭整个jvm.如果使用命令行选项运行jvm,例如:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 your.app.Main
Run Code Online (Sandbox Code Playgroud)

并将调试器与以下内容连接:

jdb -attach 127.0.0.1:8888
Run Code Online (Sandbox Code Playgroud)

你可以输入:

threads
Run Code Online (Sandbox Code Playgroud)

获取正在运行的线程列表,并使用kill命令终止正在运行的线程.我目前不确定的是这个kill命令的语法,我试过了显而易见的:

kill 0xe2e new java.lang.IllegalArgumentException("er");
Run Code Online (Sandbox Code Playgroud)

我收到消息:

killing thread: Swank REPL Thread
Thread not suspended
Expression must evaluate to an object
Run Code Online (Sandbox Code Playgroud)

("Swank REPL Thread"是我要杀死的主题,是的,我尝试先暂停它;)

我仍然无法使用java调试器,它看起来像一个线程可以随机杀死.也许你可以确保你忽略所有异常并继续运行,这就足够了,但我不确定.


Jaa*_*ans 4

据我所知,直接这样做是不可能的。但是,您可以考虑在“foo”上创建某种服务,可以从“bar”调用该服务来终止线程。当然,有数百种方法可以实现这一点。我的第一个想法是使用RMI来做到这一点。