Как лучше всего отправить сигнал запущенному дочернему процессу в моей оболочке? - PullRequest
1 голос
/ 18 мая 2019

Я работал над своей оболочкой (используя шум линии) и полностью выполнил почти все ее требования.Остается только обработка сигналов.

Я бы хотел, чтобы SIGINT был перенаправлен на любые запущенные дочерние процессы (если есть) и полностью игнорировался родительским процессом (т. Е. Процесс, выполняющий фактическую оболочку, никогда не завершится при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.

Я очень озадачен этой темой и благодарен за любые разъяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...