我正在写一个shell,想要实现信号SIGSTP
和SIGINT
。
当用户启动一个新进程并按 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信号。
答案 0 :(得分:0)
请参阅sigaction(2)
手册页。它解释了如何将工具设置为信号处理程序。
请注意,信号处理程序是异步的。这有很多含义。阅读手册页,并花些时间在Google上。