Después de suspender el proceso hijo con SIGTSTP, el shell no responde
Estoy codificando un shell básico en C, y estoy trabajando en suspender un proceso secundario en este momento.
Creo que mi manejador de señales es correcto, y mi proceso hijo se suspende, pero después de eso, el terminal debería volver al proceso padre y eso no está sucediendo.
El niño está suspendido, pero mi shell ya no registra ninguna entrada o salida. tcsetpgrp () no parece estar ayudando.
Aquí está mi controlador de señal en mi código de shell para 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);
}
¿Alguien puede decirme qué estoy haciendo mal?
¿Estoy suspendiendo mi caparazón junto con el niño, y tengo que devolver la entrada y la salida de la consola de alguna manera? ¿Cómo haría esto?
¡Gracias!