Проблема остановки дочернего цикла с помощью sigaction и перехвата Ctrl * C - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь написать программу, которая перехватывает Ctrl ^ C, используя sigaction, а затем завершает дочерний процесс форка.

Код:

static void usrHandler(int sig, siginfo_t * si, void * ignore) {
    printf("Interrupt Worked");
}

int main(int argc, char * argv[]) {
    struct sigaction sa;
    sa.sa_flags = SA_SIGINFO;
    sigemptyset( & sa.sa_mask);
    sa.sa_sigaction = usrHandler;
    sigaction(SIGINT, & sa, NULL);

    int currentFile = 1;
    int fd;
    int forkChild;

    forkChild = fork();
    if (forkChild == 0) {
        sleep(100);
    } else if (forkChild > 0) {
        sa.sa_sigaction = SIG_IGN;
        sigaction(SIGUSR1, & sa, NULL);
    }
}

Я попытался удалить весь ненужный код для моего примера. Почему-то я не могу заставить работать прерывание, когда нажимаю Ctrl ^ C. В конце концов я хотел бы иметь возможность закрыть ребенка и продолжить в родителя. Я что-то здесь не так делаю?

1 Ответ

0 голосов
/ 11 марта 2019

Почему-то я не могу заставить работать прерывание, когда нажимаю Ctrl ^ C.

Поскольку ваши данные в буфере ввода-вывода, поэтому измените printf("Interrupt Worked"); на printf("Interrupt Worked\n"); (добавьте \n), вы получите данные.

Сведения о буфере ввода-вывода см. https://stackoverflow.com/a/53083985/7671328

...