首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

APUE中关于controlling terminal的1点疑问

2013-01-19 
APUE中关于controlling terminal的一点疑问static voidsig_hup(int signo){printf(SIGHUP received, pid

APUE中关于controlling terminal的一点疑问

static void
sig_hup(int signo)
{
        printf("SIGHUP received, pid = %d\n", getpid());
}

static void
pr_ids(char *name)
{
        printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
            name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
        fflush(stdout);
}
int
main(void)
{
        char    c;
        pid_t   pid;
        pr_ids("parent");
        if ((pid = fork()) < 0) {
                printf("fork error");
        }
        else if (pid > 0) {    
                sleep(5);              
                exit(0);                
        }
        else {                  
                pr_ids("child");
                signal(SIGHUP, sig_hup);        
              kill(getpid(), SIGTSTP);        
                pr_ids("child");        //这里调用pr_ids时,父进程已经关闭,但是调用printf却可以向原来的controlling terminal写
                if (read(STDIN_FILENO, &c, 1) != 1)        //但是这里向原来的terminal读却有问题
                        printf("read error from controlling TTY, errno = %d\n",
                            errno);          //这里也可以向原来的controlling terminal写
                exit(0);
        }
}


本人linux菜鸟,各位大神,求指点。
[解决办法]
引用:
C/C++ code?12345678910111213141516171819202122232425262728293031323334353637static voidsig_hup(int signo){        printf("SIGHUP received, pid = %d\n", getpid());} static voidpr_ids(char ……



父进程比子进程先结束,子进程成为被init领养成为孤儿进程,此时子进程已经是在后台进程组了

后台进程组的进程本来就是可以写终端而还能读取终端的,当然,可以都过stty tostop命令阻止后台进程组往终端写.

你可以先使用stty tostop再执行你的程序,那子进程stop返回后就不能输出到终端了

热点排行