我有一个运行不同线程的程序'foo',fooT1,fooT2,... fooTn.
现在,如果我想写另一个程序'bar',这可能会杀死线程fooTr,那可能吗?
原因:其中一个线程fooTr跟踪产品许可证.如果这个线程被杀死; 一个人可以无限期地运行这个产品.杀死'foo'本身是可以容忍的'foo',因为这正是许可证到期时所做的.
系统:Linux的Fedora发行版
注意:启动JVM和程序foo的命令放在/etc/init.d中,任何对rc.1/rc.2/rc.3结构有相当了解的人都可以更改/添加起始参数.
我希望我的问题很明确.如果没有,我总是可以编辑它.
实际上,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命令终止正在运行的线程.我目前不确定的是这个kill命令的语法,我试过了显而易见的:
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调试器,它看起来像一个线程可以随机杀死.也许你可以确保你忽略所有异常并继续运行,这就足够了,但我不确定.