5. 贯穿案例2:mini shell(2) (1)己经完成的功能:pwd.cd.exit命令 (2)阶段性目标: ①env.export.echo及其他命令 ②标准输入.输出重定向">"."<".">>" ③设置后台进程 (3)存在问题:当mshell(后台进程)要读写终端时(如执行date时),进程会被暂停.解决方案见下一章的<信号> [编程实验]mini  shell //job.h #ifndef __…
在第8章学习了进程的控制原语,通过各种进程原语可以对进程进行控制,包括新建进程.执行新程序.终止进程等.在使用fork( )产生新进程后,就出现了进程父子进程的概念,这是进程间的关系.本章更加详细地说明进程间的关系,包括:进程组.会话.作业等. 终端登录 当我们通过硬件终端而非网络终端登录到系统时,UNIX会有一个登录流程,该流程是个大概的过程,各个实现可能存在细微差别,但总体流程不变. 在通过终端登录时,init进程负责为每个终端fork一个子进程,由子进程对应登录终端设备.init进程会fo…
4. 贯穿案例2:mini shell(3) (1)之前存在问题 ①刚运行时,mshell作为前台进程.运行的其他命令会被加入新的进程组,并且调用tcsetpgrp将这个进程组设置为前台进程组,因此mshell本身所在的进程组就成为后台进程组 ②SIGTTIN信号表示后台进程组的成员读控制终端时会产生的信号.而SIGTTOU信号表示后台进程组的成员写控制终端是产生的信号.这两个信号的默认操作是暂停进程.因此mshell上运行一些命令后,处于后台进程的mshell会试图返回到提示符状态下,这将导致…
6. 贯穿案例2:mini shell(1) [阶段性任务]实现cd.pwd和quit命令 //job.h #ifndef __JOB_H__ #define __JOB_H__ //接收命令行参数 typedef struct { char** args; //对应于主函数中的char* argv[]参数(含进程名本身) }Program; //命令行中可以包含多个程序(命令),如 //#date;ls -l,单个或多个命令通过cmd传入Job结构体中 typedef struct { cha…
9 - 进程关系 GitHub 地址 1. 进程组 每个进程除了有一个 进程 ID 外,还属于一个 进程组 .进程组是一个或多个进程的 集合 ,通常,它们是在同一作业中结合起来的,同一进程组中的各进程接受来自同一终端的各种信号.每一个进程组有一个唯一的 进程组 ID . 函数 getpgrp 返回调用进程的进程组 ID: #include <unistd.h> pid_t getpgrp(void); //返回值:调用此函数的进程的进程组ID 函数 getpgid 用于获取指定 \(pid\)…
9. 贯穿案例:构建标准IO函数库 //mstdio.h #ifndef __MSTDIO_H__ #define __MSTDIO_H__ #include <unistd.h> #define MEOF -1 //定义文件末尾标志 //文件读写模式 enum mode{READ, WRITE, APPEND}; //MFILE结构体 typedef struct { int _fd; char* _buffer; //缓冲区 char* _nextc; //下一个字符 int _mode;…
本章将详细地说明进程组以及POSIX.1引入的会话的概念.还将介绍登录shell和所有从登录shell启动的进程之间的关系 终端登录 BSD终端登录.系统管理者创建通常名为/etc/ttys的文件,其中每个终端设备都有一行,用来说明设备名和传到getty程序的参数. 当系统自举时,内核创建进程ID为1的进程(init进程).init进程读取文件/etc/ttys,对每一个允许登录的终端设备调用一次fork,它所生成的子进程则exec getty程序,如下图所示: getty对终端设备调用open…
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程 (APUE)…
第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于程序,还包含其他资源(打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内催音社的内存地址空间及一个或多个执行线程,存放全局变量的数据段等) 内核需要有效又透明地管理所有细节. 线程:执行线程的简称,是在进程中活动的对象.每个线程有一个独立的程序计数器.进程栈和一组进程寄存器.内核调度…
<大道至简>第一章——编程的精义_读后感(Java伪代码形式)1.愚公移山//愚公为团体的项目组织者.团体经理.编程人员.技术分析师等//子孙荷担者三人为三名技术人员//遗男为外协//目标为“毕力平险,指通豫南,达于汉阴”public class Ygys; //定义一个名为Ygys的类{String 人员;public static void main(String[] args)//定义主程序{人员初始化人员= new String();while(山没平){if(人员死){人员 = 愚公…