0

我正在尝试编写一个使用 sigaction 拦截 Ctrl^C 的程序,然后终止 fork 的子代。

代码:

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 时,我无法让中断工作。最终,我希望能够关闭孩子并继续在父母中。我在这里做错了吗?

4

1 回答 1

0

出于某种原因,当我按下 Ctrl^C 时,我无法让中断工作。

因为你的数据在 IO 缓冲区,所以改成printf("Interrupt Worked");( printf("Interrupt Worked\n");add \n),你会得到数据。

对于 IO 缓冲区,请参阅https://stackoverflow.com/a/53083985/7671328

于 2019-03-11T10:12:49.517 回答