免费注册 查看新帖 |

Chinaunix

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

终端,会话,作业 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-23 21:48 |只看该作者 |倒序浏览
本文总结了几个概念:terminal, session, jobs, process group

终端登录
首先来看看终端的一般登录过程。
    init--->fork init在每个终端--> getty --> login
    我们知道init是linux启动后第一个运行的用户级进程。init查看/etc/inittab配置文件,根据不同的运行级别调用对应的程序。然后每个终端fork一个init,该终端下的init启动getty进程,getty打开终端设备文件,把stdin,stdout,stderr重定向到终端设备,再运行login弹出登录提示,输入密码后登录完成,启动对应的shell,把进程归属设定为对应的用户。
    如果是从网络登录,getty变成xinetd下的对应服务,例如telnetd, 把std输入输出重定向到对应的伪终端(pty)设备文件。
伪终端,tty,pts
    传统意义的终端(tty)一般用串口连接上主机,在linux上串口的设备是以ttyS*命名。而通过网络登录,或GUI中的console文本窗口控制计算机,需要模拟终端的行为(主要是字符和特殊按键的处理规则),在具体设备(网络or桌面系统)与进程之间加入伪终端这个概念。我们在shell中输入who,可以看到我们所在的终端,比如pts/2,意思是第二个伪终端slave.
进程组
    进程组就是一组进程的集合,一个signal可以发送给同一个组的所有进程。同一行用pipe连接起来的命令会产生一个进程组。
Session,Jobs
    一个登录后的终端会启动一个session, 一个session有一个会话控制进程(通常是shell)。一个会话只有一个前台进程组,可以有若干个后台进程组。例如输入:
    pr *.c | lpr &
    产生一个后台进程组。在支持作业控制(job control)的shell,例如bash,一个进程组相当于一个Job。当job完成(结束),在新一行shell提示符显示作业状态
    [1] + Done   pr *.c | lpr &
    前台作业与后台作业最大的区别在于信号的接收。有一些退出控制信号只会发给前台进程,而控制这些信号发送的就是session leader(通常是shell)。比如ctrl+C会发送SIGINT给前台进程组,通常结束运行,而后台进程组不受影响。
    一个从telnet登录的的伪终端,如果因网络中断了,这时SIGHUP会发给所有进程组,如果我们想后台进程继续运行怎么办?在命令前输入nohup 这样在会话挂起期间后台进程仍然运行。还可以setsid改变session id,这样shell关闭也不会影响。
   更多更详细的方法参加:
   
http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/index.html
Reference
《Unix环境高级编程》有详细解析



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/73519/showart_1090187.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP