简单代码:
#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&
操作系统将控制权传递给 shell,我无法通过 CTRL+C 中断循环
我需要在 bash 脚本中运行此代码,并且需要在后台运行它。在这种情况下是否有可能以某种方式捕捉信号?