Depois de suspender o processo filho com SIGTSTP, o shell não está respondendo

Estou codificando um shell básico em C e estou trabalhando para suspender um processo filho agora.

Eu acho que meu manipulador de sinal está correto, e meu processo filho está suspendendo, mas depois disso, o terminal deve retornar ao processo pai e isso não está acontecendo.

O filho está suspenso, mas meu shell não está registrando mais nenhuma entrada ou saída. tcsetpgrp () não parece estar ajudando.

Aqui está o meu manipulador de sinal no meu código shell para o 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);
}

Alguém pode me dizer o que estou fazendo errado?

Eu estou suspendendo minha concha junto com a criança, e eu preciso retornar stdin e stdout para a concha de alguma forma? Como eu faria isso?

Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion