После приостановки дочернего процесса с SIGTSTP оболочка не отвечает

Я кодирую основную оболочку на C, и ясейчас работаю над приостановкой дочернего процесса.

Я думаю, что мой обработчик сигналов правильный, и мой дочерний процесс приостанавливается, но после этого терминал должен вернуться к родительскому процессу, и это 'не происходит

Ребенок отстранен, но мой снаряд небольше регистрировать любой вход или выход. tcsetpgrp () не делаеткажется, помогает.

Вот's мой обработчик сигнала в моем коде оболочки для SIGTSTP:

void suspend(int sig) {
    pid_t pid;
    sigset_t mask;
    //mpid is the pgid of this shell.
    tcsetpgrp(STDIN_FILENO, mpid);
    tcsetpgrp(STDOUT_FILENO, mpid);
    sigemptyset(&mask);
    sigaddset(&mask, SIGTSTP);
    sigprocmask(SIG_UNBLOCK, &mask, NULL);
    signal(SIGTSTP, SIG_DFL);
    //active.pid is the pid of the child currently in the fg.
    if (active.pid != 0) {
        kill(active.pid, SIGTSTP);
    }
    else{
        //if this code is being run in the child, child calls SIGTSTP on itself.
        pid = getpid();
        if (pid != 0 && pid != mpid){
            kill(pid, SIGTSTP);
        }
    }
    signal(SIGTSTP, suspend);
}

Может кто-нибудь сказать мне, что яя делаю неправильно?

Подвожу ли я свою оболочку вместе с ребенком, и нужно ли мне как-то вернуть stdin и stdout в оболочку? Как бы я это сделал?

Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос