UNIX的循环信号处理

时间:2014-02-06 04:09:14

标签: c++ unix signals

我的main()中有一个循环,它将一直持续到获得停止信号(ctrl z)或退出(ctrl)。 循环:

signal(SIGQUIT, signalHandler);
signal(SIGTSTP, signalHandler);
while (1)
    sleep(1);

我想要做的是当我收到一个ctrl z信号时,除了打印出“Stop received”之外,我希望我的程序实际停止。 当前信号处理程序功能:

void signalHandler(int signum) {
    if (signum == SIGQUIT)
        cout << "Quit recieved" << endl;
        break;
    else if (signum == SIGTSTP)
        cout << "Stop recieved" << endl;
        break;
    else {
        cout << "SOMETHING'S WRONG" << endl;
        exit(-1);
    }

}

我需要添加什么才能让我这样做(这是收到停止信号并停止我的程序)?到目前为止我所尝试的是将raise(SIGTSTP)放在我的signalHandler函数中,但这使我处于无限循环中。我也尝试创建一个volatile sig_atomic_t,将其初始化为0,但一旦收到信号(它保持为0),它就永远不会为我更新。

0 个答案:

没有答案