windows使用windows-kill模拟ctrl+c信号进行进程通信
今天我运行aria2c下载视频时发现如果强制终止进程的话,aria2c无法进行断点重下,但是ctr-c的话就能下载
可是如何在编程中模拟Ctrl+c,在网上搜索一番,在github找到了一个开源项目windows-kill,下载下来是一个exe,windows-kill.exe,
只要命令行执window-kill.exe -2 pid
就能向目标进程发送ctrl-c信号了。
然后我就用c++调用了aric2c进行下载,用window-kill.exe 进行停止,但是这里出现了问题,当我发送ctrl+c信号时我的主程序也收到了ctrl+c信号,导致程序直接崩溃
在网上查找许久,原来想要模拟终端ctr-c信号,就必须和目标进程共用一个控制台,发送ctr+c信号后会向所有共享这个控制台的进程发送ctr-c信号。由于我和aria2c进程共享了控制台,又和windows-kill共享了控制台,这样windows-kill一发送ctr+c信号,我自己也收到了
要想自己不接收ctr+c信号可以调整创建进程的方式,创建进程时createProcess指定CREATE_NO_WINDOW,这样就不会和自己共享一个控制台,aria2c进程和window-kill进程创建时都指定这个字段,这样发送的时候自己就不会收到crtl+c异常而导致崩溃了
也可以用代码实现
AttachConsole(p_pid);
SetConsoleCtrlHandler(NULL, true);
GenerateConsoleCtrlEvent(CTRL_C_EVENT, p_pid);
FreeConsole();
注意createProcess 子进程时要指定 CREATE_NEW_PROCESS_GROUP才能生效
本文作者:乘舟凉
本文链接:https://www.cnblogs.com/czlnb/p/15711476.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步