我在一棵树中有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)
起作用,而您只需要在添加真实处理程序之前禁用默认处理程序即可。