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

rsk*_*k82 5 c++ windows console

这是测试示例:

(1).简单程序做无限循环:

#include <iostream>
using namespace std;

int main() {
  int counter = 0;
  while (1) cout << ++counter << ": endless loop..." <<endl;
}
Run Code Online (Sandbox Code Playgroud)

(2).通过system()命令启动以上示例的另一个程序:

#include <iostream>
#include <windows.h>

using namespace std;

int main() {
  system("endless_loop.exe");
  cout << "back to main program" << endl;
}
Run Code Online (Sandbox Code Playgroud)

在执行Ctrl+Break此程序时,文本back to main program不显示.如何将此组合键限制为内部进程并将执行指针返回主应用程序?

另一件事是我并不总是能控制内部程序的源代码,所以我无法改变那里的东西.

wal*_*lyk 3

添加这个::

#include <signal.h>

 ...

signal (SIGINT, SIG_IGN);
Run Code Online (Sandbox Code Playgroud)

调用后signal(),程序会忽略 Ctrl-Break。fork()在 Linux 上,忽略信号通过/传播到子进程exec()

exec()由于 O/S + 运行时库的工作方式,我希望 Windows 能够重置默认信号处理。因此,如果您希望子进程忽略Break,请将上面的代码也添加到其中。