Linux支持使用-Command 将任意Posix-Signal发送到进程SIGINT或SIGTERM发送到进程kill.虽然SIGINT并且SIGTERM只是无聊的方式以友好或不那么友好的方式结束流程,但SIGQUIT意味着触发核心转储.这可以用来触发正在运行的Java VM打印出一个线程转储,包括所有正在运行的线程的堆栈跟踪 - 整洁!打印完调试信息后,Java VM将继续执行以前的操作; 事实上,线程转储只发生在另一个具有最高优先级的衍生线程中.(您可以通过使用自己尝试kill -3 <VM-PID>.)
请注意,您也可以使用(不支持的!)Signal和-package中的SignalHandler类注册自己的信号处理程序sun.misc,这样您就可以获得各种乐趣.
但是,我还没有找到一种向Windows进程发送信号的方法.信号由某些用户输入创建:例如,在两个平台上Ctrl-C触发a SIGINT.但是,在Windows上手动将信号发送到正在运行但非交互式的进程似乎没有任何实用性.显而易见的解决方案是使用Cygwin kill可执行文件,但是虽然它可以使用适当的Windows API结束Windows进程,但我无法使用它发送SIGBREAK(Windows等效SIGQUIT); 事实上,我认为它能够发送到Windows进程的唯一信号是SIGTERM.
因此,长话短说并重复标题:如何向Windows中的进程发送任意信号?
我们有相当多的代码只是跳转到Java 5.我们一直在那些针对Java 5版本发布的组件中使用泛型,但剩下的代码当然是充满原始的类型.我已经设置编译器为原始类型生成错误并开始手动清除它们,但是按照目前的速率,它需要很长时间才能完成它(大约有2500个错误).这是Eclipse的有用的Infer Generic Type快速修复,它总是摆脱错误,但经常生成需要进一步工作的代码.
有没有更好的方法来处理这个?有没有比Eclipse更好的自动化工具?有没有办法将重构应用于所有出现而不是一个一个地进行重构?或者你只是忽略警告?