822A - 协议栈、终端、shell、控制台

 协议栈是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(HTTP,FTP,TFTP,TELNET,DNS,EMAIL等),运输层(TCP,UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI,MAC等)。

进程组
---------------------------------------------
进程组是一个或多个进程的集合。每个进程组有一个称为组长的进程,组长进程就是其进程号(pid)等于进程组号(gid)的进程(即进程组号等于组长的进程号)。进程组的概念有很多用途,最常见的是我们在终端上键入终止信号(Ctrl-C),内核将该信号送给前台进程组的所有进程,该信号默认时会终止前台进程组中的所有进程。
(1). Shell上的一条命令或由管道线连接的几条命令形成一个进程组
(2). 每个进程只属于一个进程组
(3). 每个进程组有一个领头进程(组长)
(4). 进程组的生命周期到组中最后一个进程终止, 或加入其他进程组为止
(5). 前台进程组和后台进程组
(6). 子进程继承其父进程的进程组id
(7).getpgrp: 获得进程组 id, 即领头进程的 pid ;setpgid: 加入进程组和建立新的进程组
#include <unistd.h>
int setpgid (pid_t pid, pid_t pgid);
pid_t getpgid (pid_t pid);
int setpgrp (void);
pid_t getpgrp (void);
进程只能为自身和其子进程设置为进程组 id,当子进程调用 exec 函数之后, 父进就
不能再为它设置进程组 id.

会话
---------------------------------------------
会话期(Session,或者称为会话)则是一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。会话期可以有一个单独的控制终端(contr
olling terminal)。会话首进程与控制终端建立连接,因此也叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。通常情况下,用户登录后所执行的所有程序都属于一个会话期,而其登录 shell则是会话期首进程(Session leader),并且它所使用的终端就是会话期的控制终端(Controlling Terminal
)。当我们退出登录(logout)时,所有属于这个会话期的进程都将被终止。
(1). 一次登录形成一个会话
(2). 一个会话可包含多个进程组, 但只能有一个前台进程组.
(3). setsid()可建立一个新的会话;如果调用该函数的进程不是进程组的领头进程, 该函数才能建立新的会话.调用setsid时发生:调用 setsid 之后, 进程成为新会话的领头进程;
进程成为新进程组的领头进程;进程失去控制终端。
#include <unistd.h>
pid_t setsid(void);
(4).  会话首进程(控制进程)tcsetpgrp将控制终端分配给同一会话的其他进程组,该进程组就成了新的前台进程组。
#include <unistd.h>
int tcsetpgrp(int filedes,pid_t pgrpid);

控制终端
---------------------------------------------
(1) 会话的领头进程打开一个终端之后, 该终端就成为该会话的控制终端 (SVR4/Linux)
(2) 与控制终端建立连接的会话领头进程也称为控制进程 (session leader)
(3) 一个会话只能有一个控制终端
(4) 产生在控制终端上的输入和信号将发送给会话的前台进程组中的所有进程
(5) 当终端接口检测到网络连接断开或终端窗口关闭时, 挂起信号SIGHUP将发送到控制进程(session leader) 。该信号默认动作是终止进程。 如果会话期首进程终止,则该信号发送到该会话期前台进程组的所有进程。

图1

 

 

图2

关于几个概念的区分:终端、shell、控制台!

分类: linux 2012-03-20 19:51 37人阅读 评论(0) 收藏 举报
终端(terminal,或者叫物理终端): 
是一种设备,不是一个程序,一般说的就是能提供命令行用户界面的设备,典型的是屏幕和键盘,或其他的一些物理终端。
虚拟终端: 
屏幕和键盘只是一个终端,可能不够用,又不想增加设备投入,就产生了虚拟终端。
gnome-terminal,urxvt,mlterm,xterm等等:
是一个程序,职责是模拟终端设备,和虚拟终端的区别表面上在于它以 GUI 形式的窗口出现,内部则是程序结构和系统控制结构有所不同,但本质上差不多。
控制台(console): 
显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。
但有时专指CLI下的模拟终端设备的一个程序,和gnome-terminal,urxvt,mlterm,xterm等相同,只是CLI和GUI界面的区别。一般console有6个,tty1-6,CTRL+ALT+fn切换。还没听说过怎么换console


shell是一个抽象概念,shell的一切操作都在计算机内部,负责处理人机交互,执行脚本等,是操作系统能正常运行的重要组成部分
bash,ash,zsh,tcsh等是shell这个抽象概念的一种具体的实现,都是一个程序,都能生成一个进程对象。
如果想换shell的程序,可以修改/etc/passwd,把里面的/bin/bash换成你想要的shell,或者用chsh命令来切换


shell与终端的关系:shell把一些信息适当的输送到终端设备,同时还接收来自终端设备的输入。一般每个shell进程都会有一个终端关联,也可以没有。

 

本文出自 “莫在浮沙筑高台” 博客,谢绝转载!

你可能感兴趣的:(协议,应用层,的,以太网)