Linux支持将任意Posix信号(如SIGINT或SIGTERM )发送到使用kill-Command的进程。虽然SIGINT和SIGTERM只是以友好或不友好的方式结束进程的无聊的老方法,但SIGQUIT是用来触发核心转储的。这可以用来触发运行中的Java来打印出线程转储,包括所有正在运行的线程的堆栈-整齐!打印调试信息之后,Java将继续执行它之前正在做的事情;实际上,线程转储只是在另一个优先级最高的派生线程中发生。(您可以通过使用kill -3 <VM-PID>自己来尝试。)
请注意,您还可以使用(不受支持的!) Signal和SignalHandler类在sun.misc-package中注册您自己的信号处理程序,这样您就可以享受各种乐趣。
但是,我还没有找到向Windows进程发送信号的方法。信号是由某些用户输入创建的:例如,Ctrl-C在两个平台上触发一个SIGINT。但是,在Windows上手动向运行中的进程发送信号似乎没有任何实用工具。显而易见的解决方案是使用Cygwin kill可执行文件,但是虽然它可以使用适当的Windows结束SIGBREAK进程,但我无法使用它发送一个SIGBREAK(相当于SIGQUIT);事实上,我认为它能够发送到Windows进程的唯一信号是SIGTERM。
因此,长话短说,重复标题:如何向Windows中的进程发送任意信号?
发布于 2012-03-15 16:29:21
Ruby可以在windows上(至少模仿) SIGINT SIGKILL等,并捕获这些消息。可能想去看看。
在windows下,ruby是如何“发送信号SIGINT到该进程”的,实际上是调用TerminateProcess或该PID上的等效值。
还有一种与windows等效的“捕获ctrl+c”方法--我想这就是它所称的。
https://stackoverflow.com/questions/140111
复制相似问题