c++ - 如果一个程序是由 system() 或 CreateProcess() 从另一个程序启动的,如何防止 Ctrl+Break/Ctrl+C 关闭这两个程序?

标签 c++ windows console

这是测试示例:

(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/

相关文章:

c++ - DirectX11 2 窗口渲染

windows - 批处理文件以读取具有特殊字符的 txt 并替换其中的单词

c# - 保持 Console.ReadLine 始终在最后一行

windows - 哪种屏幕尺寸更适合最终用户

python - PyCharm Python 控制台 - 在同一行上打印未按预期工作

javascript - Chrome 控制台 - 这个代表 Kendo UI 小部件的东西实际上意味着什么?

c++ - 当A在for循环中调用函数B时,如何计算函数A的空间复杂度?

c++ - 你如何正确地初始化一个结构,它的成员是一个指向 const 值的 const 指针?

java - 使用 gcc 创建共享库

c++ - 在同一个 DLL 中使用 _COM_SMARTPTR CreateInstance 而无需注册