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才能生效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM