Я пишу на оболочке и хочу реализовать сигналы SIGSTP
а также SIGINT
,
Когда пользователь запускает новый процесс и нажимает CTRL+С он должен отправить SIGINT процессу и когда CTRL+Z нажата процесс должен получить сигнал 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 внутри моего кода.
Увидеть sigaction(2)
справочные страницы. Он объясняет, как настроить обработчик сигнала навесного оборудования.
Обратите внимание, что обработчик сигнала является асинхронным. Это имеет ряд последствий. Прочтите страницу руководства и проведите некоторое время в Google.
Других решений пока нет …