在外壳程序中向正在运行的子进程发送信号的最佳方法是什么?

时间:2019-05-17 23:09:17

标签: c shell

我一直在研究外壳(使用线路噪声),并完全实现了其几乎所有要求。剩下的就是信号处理。

我希望将SIGINT转发给任何正在运行的子进程(如果有),并被父进程完全忽略(即,运行实际shell的进程永远不会在CTRL + C时终止)。

我看过有关此问题的其他帖子,并尝试实施解决方案,例如设置流程组,但无济于事。

这是我到目前为止所做的:

void handler() {
    printf("\n");
}

void acceptInput(){

    pid_t shell_pid = getpid();
    setpgid(0, 0);

    char* line;

    while((line = linenoise(">")) != NULL) {

        sighandler_t *old_handler = signal(SIGINT, &handler);

        parseInput(input); //later calls the appropriate commands to execute

    }

     linenoiseFree(input);
}

此解决方案可以终止在CTRL + C上运行的所有子级。但是,如果没有子进程正在运行,它也会终止父进程本身。我不知道如何让父母忽略SIGINT信号。

我对此主题感到非常困惑,并感谢您的澄清。

0 个答案:

没有答案