簡単なコード:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
using namespaces td;
bool unblock = false;
long int ile = 0;
void ouch(int sig) {
cout << "signal " << sig << endl;
unblock = true;
}
int main(){
struct sigaction act;
act.sa_handler = ouch;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGINT, &act, 0);
do {
cout << "." << endl;
} while(!unblock);
cout << "EXIT" << endl;
}
コードをコンパイルすると、「a.out」が得られます。a.out を次のように実行すると:
[przemek@localhost test]$ ./a,out
期待どおりに実行され、CTRL + Cを押すと、必要に応じてプログラムが終了しますが、このようにプログラムを実行すると(プロジェクトで必要です):
[przemek@localhost test]$ ./a.out&
OS は制御をシェルに渡し、CTRL+C でループを中断できません
このコードを bash スクリプトで実行する必要があり、バックグラウンドで実行する必要があります。そのような状況でどうにかして信号をキャッチすることは可能ですか?