C ++ SIGINT和SIGSTP over ctrl + c和ctrl + z

时间:2015-11-15 01:48:10

标签: c++ signals exec pid unistd.h

我正在写一个shell,想要实现信号SIGSTPSIGINT。 当用户启动一个新进程并按 CTRL + C 时,它应该向进程发送一个SIGINT,当 CTRL + Z <按下/ kbd>进程应该得到SIGSTP信号。

到目前为止,这是我的代码:

string inputNew = input;
vector<char*> arguments;
size_t lastChar = 0;

for(int i = 0; i < input.size(); i++)
{
    char& c = input[i];
    if((c == ' ' || c == '\t'||c == '\n') && lastChar != i)
    {
        c = '\0'; 
        arguments.push_back(&input[0] + lastChar);
        lastChar = i+1;
    }
}

bool checkIfBackground(string & input)
{
    size_t lastChar = input.size() - 1;
    if(input[lastChar] == '&')
    {
        return true;
    }
    return false;
}

if((pid = fork()) < 0) {
    exit(1);
} else if(pid == 0) {
    execvp(arguments[0], &arguments[0]);
    exit(1);
} else if(checkIfBackground(inputNew) == false) {
    int status;
    pid_t pid_r;
    if(waitpid(pid, &status, 0) < 0) {
        cout << "PID not known!";
    }
} else {
    cout << "Prozess is waiting in the background." << endl;
}

我不知道如何在我的代码中实现SIGSTP和SIGINT信号。

1 个答案:

答案 0 :(得分:0)

请参阅sigaction(2)手册页。它解释了如何将工具设置为信号处理程序。

请注意,信号处理程序是异步的。这有很多含义。阅读手册页,并花些时间在Google上。