我在一棵树中有3个进程:A-> B->C。A是我不拥有的主机应用程序,它使用CreateProcess调用dwCreationFlags = CREATE_NEW_PROCESS_GROUP创建进程B。B是我的服务,C是我想要的Java子进程使用CreateProcess生成,并能够发送Ctrl + C来触发关闭钩子(Hook)。

根据MSDN上的进程创建标志页面,CREATE_NEW_PROCESS_GROUP标志对所有子进程禁用Ctrl + C:



我需要一种绕过此行为的方法,以便可以将Ctrl + C信号发送到进程C。可以发送Ctrl + Break,但这还不够,因为这是Java进程,并且Ctrl + Break不会触发关闭。我尝试使用CREATE_NEW_CONSOLE创建进程C,并假设这将允许新控制台接收所有信号,但Ctrl + C也被阻止。有谁知道是否有某种方法可以覆盖或绕过CREATE_NEW_PROCESS_GROUP并取消此Ctrl + C阻止?

最佳答案

谢谢哈利的建议!对我有用的是:

SetConsoleCtrlHandler(null, false);
SetConsoleCtrlHandler(MyActualHandler, true);

看起来进程组可以通过调用SetConsoleCtrlHandler(null, true)起作用,而您只需要在添加真实处理程序之前禁用默认处理程序即可。

07-24 09:38
查看更多