SIGTSTP时从终端分离进程

时间:2018-06-15 19:50:30

标签: c unix signals

我试图处理信号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);
}

0 个答案:

没有答案