免费注册 查看新帖 |

Chinaunix

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

关于控制终端,会话的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-18 18:13 |只看该作者 |倒序浏览
#include<stdio.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<stdlib.h>
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()
{
  char c;
  pid_t pid,pid1;
  if((pid=fork())<0)
  {
  perror("fork error");
  exit(1);
  }
  else if(pid>0)
  {
  pr_ids("parent");
  exit(0);
  }
  else
  {
  pr_ids("child");
  sleep(3);
  //pid1=setsid();
  //if(open("/dev/tty",O_RDWR)<0)
  // printf("no controlling terminal\n");
  //pr_ids("child");

  if(read(STDIN_FILENO,&c,1)!=1)
  printf("read error from controlling TTY,errno=%d\n",errno);
  //printf("c=%c\n",c);
  exit(0);
  }
}

运行结果:说明后台进程想读取控制终端时,对后台进程产生SIGTTIN。因为是孤儿进程,所以read返回出错。
[root@localhost linux]# ./test9_2
child:pid=11854,ppid=11853,pgrp=11853,tpgrp=11853
parent:pid=11853,ppid=9156,pgrp=11853,tpgrp=11853
[root@localhost linux]# child:pid=11854,ppid=1,pgrp=11853,tpgrp=9156
read error from controlling TTY,errno=5

[root@localhost linux]#  

去掉注释,使子进程创建一个会话。这运行结果说明创建会话后的进程没有控制终端。问题来了

1,没有控制终端和能读取输入的字符和输出到屏幕是什么关系?
2,没有控制终端了为什么还能read(STDIN_FILENO,&c,1)。
3,在第一种情况下说明后台进程不能read(STDIN_FILENO,&c,1),但第二种情况也是变成后台进程为什么可以了

[root@localhost linux]# ./test9_2
child:pid=12003,ppid=12002,pgrp=12002,tpgrp=12002
parent:pid=12002,ppid=9156,pgrp=12002,tpgrp=12002
[root@localhost linux]# no controlling terminal
child:pid=12003,ppid=1,pgrp=12003,tpgrp=-1

[root@localhost linux]# c=s /输入s

[root@localhost linux]#  

疑问多了点,希望能为我讲解讲解,小弟先谢谢了

论坛徽章:
0
2 [报告]
发表于 2011-11-19 00:00 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2011-11-19 09:09 |只看该作者
等大虾。。。

论坛徽章:
0
4 [报告]
发表于 2012-12-25 00:07 |只看该作者
我的理解是同一会话内只能有一个前台进程组能读取输入
不同会话可以分别处理控制终端
调用setsid之后进程成为新会话的首进程,同时也是新进程组的组长
但是什么时候分配控制终端呢?
根据apue“如何分配控制终端的机制由具体实现选择”,我觉得第二个会话此时已经有了一个控制终端,那就是“/dev/tty”
所以能够进行输入

请大侠指正
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP