2015-11-15 2 views
0

Я пишу на оболочке и хочу реализовать сигналы SIGSTP и SIGINT. Когда пользователь запускает новый процесс и прижимает CTRL +C он должен послать SIGINT к процессу и когда CTRL +Z нажимается процесс должен получить сигнал SIGSTP.C++ SIGINT и SIGSTP над ctrl + c и ctrl + z

Вот мой код до сих пор:

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

См. Справочные страницы sigaction(2). В нем объясняется, как настроить средство обработки сигналов.

Обратите внимание, что обработчик сигнала является асинхронным. Это имеет ряд последствий. Прочтите страницу руководства и проведите некоторое время в Google.

Смежные вопросы