今天我運行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才能生效