Linux 支持使用 -Command 向进程发送任意 Posix 信号,例如SIGINT
或。虽然并且只是以友好或不那么友好的方式结束进程的无聊旧方法,但旨在触发核心转储。这可用于触发正在运行的 Java VM 打印出线程转储,包括所有正在运行的线程的堆栈跟踪——太棒了!打印调试信息后,Java VM 将继续执行之前的操作;事实上,线程转储只是发生在另一个具有最高优先级的衍生线程中。(您可以使用 自己尝试一下。)SIGTERM
kill
SIGINT
SIGTERM
SIGQUIT
kill -3 <VM-PID>
Signal
请注意,您还可以使用 -package 中的(不支持!)和SignalHandler
类来注册自己的信号处理程序sun.misc
,因此您可以从中获得各种乐趣。
但是,我还没有找到向 Windows 进程发送信号的方法。信号由某些用户输入创建:例如,在两个平台上Ctrl-C
触发。SIGINT
但似乎没有任何实用程序可以手动向 Windows 上正在运行但非交互式进程发送信号。显而易见的解决方案是使用 Cygwinkill
可执行文件,但是虽然它可以使用适当的 Windows API 结束 Windows 进程,但我无法使用它发送SIGBREAK
(相当于 Windows 的SIGQUIT
);事实上,我认为它能够发送到 Windows 进程的唯一信号是SIGTERM
.
因此,长话短说并重复标题:如何向 Windows 中的进程发送任意信号?