这是测试示例:
(1)。执行无限循环的简单程序:
#include <iostream>
using namespace std;
int main() {
int counter = 0;
while (1) cout << ++counter << ": endless loop..." <<endl;
}
(2)。另一个通过 system()
命令启动上述示例的程序:
#include <iostream>
#include <windows.h>
using namespace std;
int main() {
system("endless_loop.exe");
cout << "back to main program" << endl;
}
在此程序上执行 Ctrl+Break
时,文本 back to main program
不显示。
如何将此组合键限制在内部进程并将执行指针返回给主应用程序?
另一件事是我并不总是能控制内部程序的源代码,所以我无法更改那里的东西。
最佳答案
添加这个::
#include <signal.h>
...
signal (SIGINT, SIG_IGN);
signal()
调用后,程序忽略 Ctrl-Break。在 Linux 上,忽略信号通过 fork()
/exec()
传播到子进程。
由于 O/S + 运行时库的工作方式,我希望 Windows 重置 exec()
上的默认信号处理。因此,如果您想让 child 忽略 Break,请将上面的代码也添加到它。
关于c++ - 如果一个程序是由 system() 或 CreateProcess() 从另一个程序启动的,如何防止 Ctrl+Break/Ctrl+C 关闭这两个程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873155/