免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1743 | 回复: 1
打印 上一主题 下一主题

[Linux] APUE书中的一点疑问--关于controlling terminal [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-10 14:33 |只看该作者 |倒序浏览
本帖最后由 leewon1988 于 2013-01-10 14:43 编辑
  1. static void
  2. sig_hup(int signo)
  3. {
  4.         printf("SIGHUP received, pid = %d\n", getpid());
  5. }

  6. static void
  7. pr_ids(char *name)
  8. {
  9.         printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
  10.             name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
  11.         fflush(stdout);
  12. }
  13. int
  14. main(void)
  15. {
  16.         char    c;
  17.         pid_t   pid;
  18.         pr_ids("parent");
  19.         if ((pid = fork()) < 0) {
  20.                 printf("fork error");
  21.         }
  22.         else if (pid > 0) {   
  23.                 sleep(5);              
  24.                 exit(0);               
  25.         }
  26.         else {                  
  27.                 pr_ids("child");
  28.                 signal(SIGHUP, sig_hup);        
  29.               kill(getpid(), SIGTSTP);        
  30.                 pr_ids("child");        //这里调用pr_ids时,父进程已经关闭,但是调用printf却可以向原来的controlling terminal写
  31.                 if (read(STDIN_FILENO, &c, 1) != 1)        //但是这里向原来的terminal读却有问题
  32.                         printf("read error from controlling TTY, errno = %d\n",
  33.                             errno);          //这里也可以向原来的controlling terminal写
  34.                 exit(0);
  35.         }
  36. }
复制代码
这是为什么?本人linux新手,可能是我理解有错误。
各位求指点

论坛徽章:
0
2 [报告]
发表于 2013-01-10 14:58 |只看该作者
我开始的理解是printf是继承于session leader的file no,但是STDIN_FILENO在变为孤儿进程组的时候是会被重置的。。
不用我是乱猜,而且完全没有根据。。。。


各位大牛,指点一二
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP