第7章 进程关系(5)_贯穿案例2:mini shell(2)

5. 贯穿案例2:mini shell(2)

(1)己经完成的功能:pwd、cd、exit命令

(2)阶段性目标:

  ①env、export、echo及其他命令

  ②标准输入、输出重定向">"、"<"、">>"

  ③设置后台进程

【编程实验】mini  shell

//job.h

//job.c

//mshell.c

时间: 2024-12-29 10:11:14

第7章 进程关系(5)_贯穿案例2:mini shell(2)的相关文章

APUE学习笔记:第九章 进程关系

9.1 引言 本章将更详尽地说明进程组以及POSIX.1引入的会话的概念.还将介绍登陆shell(登录时所调用的)和所有从登陆shell启动的进程之间的关系. 9.1 终端登陆 系统管理员创建通常名为/etc/ttys的文件,其中每个终端设备都有一行,每一行说明设备名传递给getty程序的参数.当系统自举时,内核创建进程ID为1的进程,依旧是init进程.init进程使系统进入多用户状态.init进程读文件/etc/ttys,对每一个允许登陆的终端设备,init调用一次fork,所生成的子进程则

第4章 文件和目录(5)_贯穿案例2:mini shell(1)

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 { char

第7章 进程关系(2)_进程链和进程扇

2. 进程链和进程扇 (1)创建进程链 ①进程链:就是父进程创建一个子进程,创建的子进程再次创建出属于自己的子进程,这样依次往下循环,如下图所示. ②关键实现:判断出如果是父进程则退出,保证父进程只会创建一个子进程.如果是子进程继续创建接下来的进程再退出. [编程实验]构建进程链 //process_link.c #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main(int argc, c

第7章 进程关系(4)_前台进程组

4. 前台进程组 (1)前台进程组 ①自动接受终端信号的组称为前台进程组 ②在终端通过ctrl+c等动作产生的信号首先被前台进程组接受. ③在shell启动的若干个进程组默认是父进程所在的组为前台进程组,其他进程组则为后台进程组 ④除非是默认,否则都要通过调度才能成为前台进程组 (2)获取/设置前台进程组ID 头文件 #include <unistd.h> 函数 pid_t tcgetpgrp(void);  //获取前台进程组ID,出错返回-1 int tcsetpgrp(int fd, p

第7章 进程关系(1)_守护、孤儿和僵尸进程

1. 守护.孤儿和僵尸进程 (1)守护进程 ①守护进程(daemon)是生存期长的一种进程.它们常常在系统引导装入时启动,在系统关闭时终止. ②所有守护进程都以超级用户(用户ID为0)的优先权运行. ③守护进程没有控制终端 ④守护进程的父进程都是init进程(1号进程). (2)孤儿进程:父进程先结束,子进程就成为孤儿进程,会由1号进程(init进程)领养. [编程实验]产生孤儿进程 //process_orphen.c #include <unistd.h> #include <std

apue学习笔记(第九章 进程关系)

本章将详细地说明进程组以及POSIX.1引入的会话的概念.还将介绍登录shell和所有从登录shell启动的进程之间的关系 终端登录 BSD终端登录.系统管理者创建通常名为/etc/ttys的文件,其中每个终端设备都有一行,用来说明设备名和传到getty程序的参数. 当系统自举时,内核创建进程ID为1的进程(init进程).init进程读取文件/etc/ttys,对每一个允许登录的终端设备调用一次fork,它所生成的子进程则exec getty程序,如下图所示: getty对终端设备调用open

第9章进程关系总结

1 进程组与进程组ID 获取进程组ID pid_t getpgrp() pid_t getpgid(pid_t pid) 设置进程组ID int setpgid(pid_t pid,pid_t pgid) 2 会话 一次登录期间产生的所有进程组都属于同一个会话,会话是进程组的集合 通过setsid可以创建会话,调用setsid的进程不能是进程组的组长进程 1)该进程将成为新会话首进程 2)该进程成为新进程组的组长进程 3)该进程没有控制终端 为了保证调用setsid函数的进程不是组长进程,一般调

第十三章 进程、线程类的实现

                                        第十三章   进程.线程类的实现         多线程是指在一个进程内可以同时运行多个任务,每个任务由一个单独的线程来完成.线程是进程运行的基本单位,一个进程中可以同时运行多个线程.如果程序被设置为多线程方式,可以提高程序运行的效率和处理速度. 多个线程共用一个进程的资源:进程的调度.切换是在10ms的"时钟滴答"定时中断程序里进行.如果一个线程获得CPU,那么在下一个Tick到来前:是不可能被切换出去的

(七) 一起学 Unix 环境高级编程(APUE) 之 进程关系 和 守护进程

. . . . . 目录 (一) 一起学 Unix 环境高级编程(APUE) 之 标准IO (二) 一起学 Unix 环境高级编程(APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程(APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程(APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程(APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程(APUE) 之 进程关系