После приостановки дочернего процесса с 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 в оболочку? Как бы я это сделал?
Спасибо!