相关函数列表
//返回调用进程的进程组ID #include <unistd.h> pid_t getpgrp(void); pid_t getpgid(pid_t pid); //getpgid(0) 等于 getpgrp() //创建一个新会话 #include <unistd.h> pid_t setsid(void); pid_t getsid(get_t pid); //返回会话首进程的进程组ID //对于setsid()函数,如果调用此函数的进程不是一个进程组的组长,则此函数创建一个新会话 //1.该进程变成新会话的会话首进程(session leader会话首进程是创建该会话的进程),此时,该进程 // 是新会话中唯一进程 //2.该进程成为一个新进程组的组长进程。新进程组ID是该调用进程的进程ID //3.该进程没有控制终端,如果在调用setsid之前该进程有一个控制终端,那么这种联系也被切断 //根据FD获取哪个进程组是前台进程组 #include <unistd.h> pid_t tcgetpgrp(int fd); int tcsetpgrp(int fd, pid_t pgrpid); //给出控制TTY的文件描述符,下面函数可以获得会话首进程的进程组ID #include <unistd.h> pid_t tcgetsid(int fd);
终端登录
系统管理者创建/etc/ttys文件,之后init进程读取这个文件,然后fork新进程执行exec调用getty程序
getty对终端设备调用open函数,以读写方式将终端打开,一旦设备打开,则文件描述符就被设置到该设备,然后getty输出“login”之类的信息。getty会根据波特率适当的更改终端的速度。
当用户输入用户名后,getty工作就完成了,然后它调用login程序
execle("/bin/login", "login" "-p", username, (char*)0, envp);
最初的init进程有超级用户权限,所以它fork后的进程都有超级用户权限
login能处理多项工作,得到用户名调用getpwnam取得相应的用户口令,然后调用getpass提示"password",用户输入口令后,调用crypt将用户口令加密,并与阴影文件的pw_passwd字段比较,如果出错则login调用exit表示登陆失败,父进程init了解到子进程情况后再次调用fork又执行getty,重复上述过程
如果用户登陆正常login就将完成如下工作:
1)将当前工作目录更改为用户的起始目录(chdir)
2)调用chown更改该终端的所有权,使登陆用户成为它的所有者
3)将对该终端设备的访问权限改变为“用户读和写”
4)调用setgid以及initgroups设置进程的组ID
5)用login得到所有信息初始化环境:起始目录(HOME),shell(SHELL),用户名(USER和LOGNAME)以及一个
系统默认路径(PATH)
6)login进程更改为登陆用户的用户ID(setuid)并调用该用户的登陆shell,其方式类似于
execl("/bin/sh", "-sh", (char*)0);
网络登陆
init进程调用一个shell,使其执行shell脚本/etc/rc,由此shell脚本启动一个守护进程inetd。一旦shell脚本终止,inetd的父进程就变成init。inetd等待TCP连接达到主机,然后执行一次fork,生成子进程exec执行适当的程序。
当telnet请求达到后,inetd会fork一个进程,然后执行telnetd程序(exec调用),之后分成两个进程,父进程继续处理连接的通讯,子进程执行login程序,父进程和子进程通过伪终端相连接。
执行过程:
1.init调用fork和exec启动inetd
2.inetd接收到客户端的telnet连接,然后fork新进程
3.inetd继续接受客户来的连接,新进程调用exec启动telnetd处理用户逻辑
会话
进程组是一个或多个进程的集合,会话是一个或多个进程组的集合
比如proc1 | proc2 & | proc3 | proc4 | proc5
会话和进程组还有一些其他特性
1.一个会话可以有一个控制终端(controlling terminal),这通常是终端设备(在终端登录)或伪终端设备(网络)
2..建立与控制终端连接的会话首进程被称为控制进程(controlling process)
3.一个会话中的几个进程组可被分成一个前台进程组(foreground process group)以及一个或多个后台进程
组(background process group)
4.如果一个会话有一个控制终端,则它有一个前台进程组,其他进程组为后台进程组
5.无论何时键入终端的中断键,都会将终端信号发送至前台进程组的所有进程
6.如果终端接口检测到调制解调器(或网络)已断开连接,则将挂断信号发送至控制进程(会话首进程)
作业控制
允许在一个终端上启动多个作业(进程组),它控制一个作业可以访问该终端以及哪些作业在后台运行。要求以下三种形式的支持:
1.支持作业控制的shell
2.内核中的终端驱动程序必须支持作业控制
3.内核必须提供对某些作业控制信号的支持
//这里启动了两个作业 pr *.c | lpr & make all & //在后台运行,之后又将作业1号变为前台运行 cat > temp.foo & fg %1 stty tostop //禁止作业输出至控制终端对于前台,后台作业以及终端驱动程序的作业控制功能总结
相关推荐
此外,书中还涉及了进程环境、系统调用接口、编译和链接、动态装载、错误处理和调试技巧等内容,这些都是在UNIX环境下进行高级编程所必备的知识。同时,书中也讨论了线程编程,包括线程的创建、同步和通信,这对于多...
《UNIX环境高级编程》是一本深入探讨UNIX系统编程的权威参考书籍。它涵盖了UNIX编程的各个方面,从基础的UNIX系统结构和原理,到文件操作、进程控制、进程间通信、多线程编程、网络编程以及终端I/O和伪终端等内容。...
### UNIX环境高级编程知识点概述 #### 一、UNIX基础知识 **1.1 引言** 在计算机科学领域,操作系统作为连接硬件与软件的桥梁,为应用程序提供了必要的服务,包括但不限于执行新程序、打开文件、读取文件内容、...
《UNIX环境高级编程》第9章主要讨论的是进程间的关系,包括进程的父子关系、进程组、对话期的概念,以及登录shell和相关进程之间的交互。这一章的内容是建立在前一章关于进程控制的基础之上的,进一步深入探讨了进程...
《Unix环境高级编程》是一本深受程序员和系统管理员喜爱的经典之作,主要涵盖了在Unix操作系统环境下进行高级编程的各种技术和方法。这本书分为多个章节,详细讲解了Unix系统接口、进程管理、文件系统、网络通信等...
《UNIX环境高级编程(第3版)》在保持前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系...
《UNIX环境高级编程》是一本深受程序员和系统管理员喜爱的经典之作,主要涵盖了在UNIX操作系统上进行高级编程的各种技术和实践。这本书以清晰的结构和深入的解释,为读者提供了丰富的UNIX编程知识,帮助他们掌握在这...
《Unix环境高级编程》(Advanced Programming in the UNIX Environment, 简称APUE) 是一本经典的技术书籍,尤其对于深入理解和开发Unix系统来说是不可或缺的资源。英文第三版更是汇集了作者多年的实践经验与深入的...
《Unix环境高级编程》是一本深入探讨Unix操作系统编程的经典之作,由W. Richard Stevens撰写,是许多计算机科学专业学生和专业开发者的必备参考书。这本书详细介绍了如何在Unix系统上进行系统级编程,包括文件I/O、...
"UNIX环境高级编程"通常涵盖的主题包括进程管理、文件I/O、信号处理、网络编程、系统调用接口以及内存管理等。 课后习题往往旨在巩固和深化对这些概念的理解。以下是一些可能涉及的知识点: 1. **进程管理**:包括...
《UNIX环境高级编程》是一本深受程序员和系统管理员喜爱的经典之作,它由W. Richard Stevens撰写,对中国乃至全球的UNIX和Linux开发者具有深远影响。这本书深入浅出地讲解了在UNIX系统上进行程序开发的各种技术和...
《Unix环境高级编程》是一本深入探讨Unix操作系统编程的经典之作,尤其对于想要在Linux环境下进行C语言编程的开发者来说,这本书具有极高的参考价值。它不仅涵盖了基础的系统调用,还深入到复杂的进程管理、文件操作...
《UNIX环境高级编程》是Unix系统编程领域的一本经典之作,被誉为“圣书”,对于学习Linux开发技术的人员来说,是一本不可或缺的参考书。这本书深入讲解了在Unix环境下进行系统级编程的各种技术和细节,涵盖了从基本...
《Unix环境高级编程》与《Unix网络编程:进程间通信》是两本在计算机科学领域具有深远影响力的经典著作。它们涵盖了Unix系统的核心概念和技术,对于理解操作系统原理、进行系统级编程以及深入研究网络通信有着不可...
《UNIX环境高级编程》是一本深受IT专业人士喜爱的经典著作,尤其对于那些致力于深入理解Linux操作系统以及UNIX系统的开发者和系统管理员而言,这本书具有极高的参考价值。作为“学习Linux最好的两本书之一”,它与...
### Unix环境高级编程 第三版 知识点详解 #### 一、书籍概述与目标读者 《Unix环境高级编程》第三版是一本针对高级程序员和网络专业人士编写的实用参考书。该系列书籍由Addison-Wesley出版社创建于1990年,旨在为...
《UNIX环境高级编程》第三版是一本经典的UNIX系统编程指南,涵盖了广泛的UNIX系统接口和编程技术。随书附带的代码库"apue.3e"是作者为书中各章节精心设计的实例,旨在帮助读者深入理解并实践UNIX编程的核心概念。 ...