Как заставить чтение пройти - PullRequest
1 голос
/ 01 октября 2011

Итак, я пишу простую оболочку.Соответствующие коды размещены ниже.

void sig_int_handler(int signum) { 
    if (pid == -1) // do nothing
    else kill(...);
}

signal(SIGINT, sig_int_handler);

..
while(1) {
    pid = -1;
    printf(COMMAND_PROMPT);
    input_len = read(...);

    if only enter is pressed: continue;

    // parse inputs 

    pid = fork();
    if (pid == 0) { // Do child process operations }
    else if (pid > 0) { // Parent waits for child }
    else {..}
}

Но теперь, когда я нажимаю Ctrl + C, он правильно выходит из дочернего процесса.Однако, если я нажимаю ctrl + c на обычном терминале, он выводит "ctrl + c" на стандартный вывод, но тогда он ничего не делает.Как заставить перевод строки в чтение, чтобы он выдал мне еще один запрос?

1 Ответ

2 голосов
/ 01 октября 2011

Я предполагаю, что вы пытаетесь написать что-то вроде оболочки здесь.

Если так: вам не нужно обрабатывать ^ C в вашей оболочке. Если вы установили новую группу процессов для дочернего процесса (используя setpgid() и TIOCSPGRP), только она получит SIGINT.

...