我试图处理信号SIGTSTP以便在SIGCONT信号之后恢复程序。首先,我需要从当前的tty终止我的程序,但我不知道如何做到这一点。我找到了这个解决方案,但我不明白它为什么会起作用。我是如何做到这一点的?
ioctl(g_fd, TIOCSTI, "\x1A");
我的程序中处理信号的部分。
void signal_handler(int sig)
{
if (sig == SIGINT || sig == SIGSTOP)
correct_escape();
else if (sig == SIGTSTP)
{
restore_termconf();
signal(SIGTSTP, SIG_DFL);
ioctl(g_fd, TIOCSTI, "\x1A");
}
else if (sig == SIGCONT)
{
init_termcap();
g_termconf = configure_tty();
display_files();
}
else if (sig == SIGWINCH)
display_files();
}
void setup_signals(struct termios termconf)
{
g_termconf = termconf;
signal(SIGWINCH, signal_handler);
signal(SIGINT, signal_handler);
signal(SIGSTOP, signal_handler);
signal(SIGTSTP, signal_handler);
signal(SIGCONT, signal_handler);
}