5

これはテスト例です:

(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ません。このキーの組み合わせをプロセス内に制限し、実行ポインタをメイン アプリに戻す方法は?

もう1つは、プログラム内のソースコードを常に制御できるとは限らないため、そこを変更できないことです。

4

1 に答える 1

3

これを追加::

#include <signal.h>

 ...

signal (SIGINT, SIG_IGN);

呼び出し後signal()、プログラムはCtrl-Breakを無視します。fork()Linuxでは、シグナルを無視すると、 /を介して子プロセスに伝播しますexec()

exec()O / S +ランタイムライブラリの動作方法により、Windowsがデフォルトの信号処理をリセットすることを期待します。したがって、子にBreakを無視させたい場合は、上記のコードも追加してください。

于 2012-06-04T06:40:42.907 に答える