为了能到远方,脚下的每一步都不能少.|

园龄:粉丝:关注:

2021-12-20 16:28阅读: 2218评论: 0推荐: 0

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 中国大陆许可协议进行许可。

posted @   乘舟凉  阅读(2218)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起