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!