Linux课程设计进程控制

合集下载

进程控制实验报告

进程控制实验报告

一、实验目的本次实验旨在通过Linux操作系统的实践操作,加深对进程控制概念的理解。

通过学习进程的创建、调度、同步、通信等基本操作,掌握进程控制的基本方法,并了解进程间通信的机制。

二、实验环境1. 硬件环境:Intel(R) Core(TM) i5-3210M CPU2.50GHz,4.00GB内存。

2. 软件环境:64位Linux操作系统。

三、实验内容1. 进程的创建与终止2. 进程的调度与优先级3. 进程同步与互斥4. 进程间通信四、实验步骤1. 进程的创建与终止(1)使用`fork()`函数创建子进程,通过比较返回值判断创建是否成功。

```cpid_t pid = fork();if (pid < 0) {perror("fork failed");exit(1);}```(2)使用`exit()`函数终止进程。

```cexit(0);```2. 进程的调度与优先级(1)使用`nice()`函数调整进程优先级。

```cnice(10); // 降低进程优先级```(2)使用`priority_seta()`函数设置进程优先级。

```cstruct sched_param param;param.sched_priority = 10;if (sched_setscheduler(pid, SCHED_RR, &param) == -1) { perror("sched_setscheduler failed");exit(1);}```3. 进程同步与互斥(1)使用`semaphore_t`类型的信号量实现进程同步。

```csemaphore_t sem;sem_init(&sem, 0, 1);sem_wait(&sem);// 执行临界区代码sem_post(&sem);sem_destroy(&sem);```(2)使用`mutex_t`类型的互斥锁实现进程互斥。

操作系统实验2——进程控制

操作系统实验2——进程控制

实验2 进程控制一、实验目的加深对进程概念的理解,明确进程和程序和区别;进一步认识并发执行的实质;分析进程争用资源的现象。

二、实验内容1. 熟悉Linux进程控制常用命令。

2. 输入进程创建、控制的程序并调试程序。

三、实验预备知识1. 进程控制常用命令(1)ps 命令功能:查看目前的系统中有哪些进程,以及它们的执行情况。

常用命令格式及功能如下:ps 查看系统中属于自己的进程ps au 查看系统中所有用户的进程ps aux 查看系统中包含系统内部的及所有用户的进程主要输出列说明:USER:进程所有者的用户名PID:进程号TTY:进程从哪个终端启动TIME:此进程所消耗的CPU时间COMMAND:正在执行的命令或进程名称(2)top 命令功能:动态显示进程,实时监测进程状态。

与ps命令相似,只是top命令在执行后会以指定的时间间隔来刷新显示信息,以使top所显示的进程状态总是当前时刻的。

(3)kill 命令功能:结束或终止进程。

常用命令格式及功能如下:kill 5302 杀死PID为5302的进程kill -9 5302 强行杀死PID为5302的进程(4)echo $变量名功能:查看外壳变量的设定值。

例:echo $$ 显示当前进程PID2.常用系统调用函数常用系统调用函数、程序的说明、参数及定义如下:(1)fork()函数功能:创建一个新进程函数格式:int fork()其中返回int取值意义如下:小于0:创建失败0: 创建成功,在子进程中返回0值大于0: 创建成功,在父进程中返回子进程id值-1:创建失败(2)wait()函数功能:父进程等待子进程终止,以便对子进程进行善后处理。

函数格式:int wait(int *statloc)参数定义:statloc 指出子进程终止状态码的位置。

若不关心子进程的终止状态,可传递一个空指针。

返回值:正常返回时,为终止子进程的PID;错误返回时为-1;其他为0。

linux网络操作系统课程设计

linux网络操作系统课程设计

linux网络操作系统课程设计一、课程目标知识目标:1. 理解Linux网络操作系统的基本概念,掌握其体系结构;2. 学会使用Linux命令行,熟悉常见网络配置与故障排除方法;3. 掌握Linux文件系统管理,了解文件权限与安全策略;4. 了解Linux下的网络服务与进程管理,理解系统启动流程。

技能目标:1. 能够独立安装与配置Linux操作系统,进行基本的网络设置;2. 熟练运用Linux命令行进行文件操作、权限管理及进程控制;3. 能够分析网络问题,利用Linux命令行工具进行故障排查;4. 学会编写简单的Shell脚本,实现自动化网络管理任务。

情感态度价值观目标:1. 培养学生对Linux网络操作系统的兴趣,激发探索精神;2. 培养学生的团队协作意识,学会分享与互助;3. 引导学生树立正确的网络道德观念,遵守网络安全规范;4. 培养学生的自主学习能力,养成良好的学习习惯。

本课程针对高年级学生,结合学科特点,注重理论与实践相结合。

在教学过程中,要求教师以学生为中心,关注个体差异,引导学生在实践中掌握知识,提高技能。

通过本课程学习,使学生具备一定的Linux网络操作系统应用与管理能力,为未来的职业发展打下坚实基础。

二、教学内容1. Linux操作系统概述- 系统特点与优势- 体系结构解析2. Linux命令行操作- 常用基本命令- 文件系统结构与命令- 权限管理命令3. 网络配置与故障排除- 网络接口配置- 路由与网关设置- 常用网络故障排除命令4. 文件系统管理- 文件与目录操作- 文件权限与归属管理- 磁盘空间管理5. 网络服务与进程管理- 常见网络服务原理与配置- 进程查看与管理- 系统启动流程与控制6. Shell脚本编程- 基本语法与结构- 常用命令与控制结构- 实例分析与编写本教学内容依据课程目标,按照系统性与科学性原则进行组织。

教学大纲明确各部分内容的教学安排,结合教材章节,确保学生能够逐步掌握Linux网络操作系统的相关知识。

linux教案_高校教学

linux教案_高校教学

Linux教案_高校教学一、课程简介1.1 课程背景Linux作为开源操作系统,在计算机领域具有广泛的应用。

本课程旨在让学生了解Linux操作系统的基本概念、掌握Linux常用命令及操作,并具备一定的Linux系统管理能力。

1.2 课程目标(1)了解Linux操作系统的基本概念及发展历程;(2)熟悉Linux文件系统结构;(3)掌握Linux常用命令及操作;(4)具备基本的Linux系统管理能力;(5)培养学生实际操作计算机的能力和团队协作精神。

二、教学内容2.1 教学资源教材:《Linux操作系统教程》实验环境:Linux服务器、学生机房2.2 教学安排(1)第1-2周:Linux基本概念及发展历程;(2)第3-4周:Linux文件系统结构及常用命令;(3)第5-6周:Linux文件权限与用户管理;(4)第7-8周:Linux进程管理及系统监控;(5)第9-10周:Linux网络配置与安全管理;(6)第11-12周:Linux常用服务器配置与运维;(7)第13-14周:综合练习与实战案例。

三、教学方法3.1 授课方式采用讲授、实验、讨论相结合的方式进行教学。

3.2 实验环节安排每次课后进行实验操作,巩固所学知识。

3.3 讨论与互动鼓励学生在课堂上提问、发表观点,教师引导学生进行讨论。

四、考核方式4.1 平时成绩(1)课堂表现:30%(2)实验报告:40%4.2 期末考试(1)理论知识:30%(2)实际操作:70%五、教学案例5.1 案例一:Linux系统安装与配置引导学生了解Linux系统的安装方法,学会使用Linux命令进行基本操作。

5.2 案例二:文件权限管理教授如何设置文件权限,掌握用户组管理及文件所有权概念。

5.3 案例三:进程管理讲解如何查看进程、杀死进程,以及进程优先级调整。

5.4 案例四:网络配置与安全管理引导学生配置Linux网络,了解网络安全策略。

5.5 案例五:Nginx服务器配置教授如何安装与配置Nginx服务器,实现网站的发布与访问。

Linux系统编程之进程控制(进程创建、终止、等待及替换)

Linux系统编程之进程控制(进程创建、终止、等待及替换)

Linux系统编程之进程控制(进程创建、终⽌、等待及替换)进程创建在上⼀节讲解进程概念时,我们提到fork函数是从已经存在的进程中创建⼀个新进程。

那么,系统是如何创建⼀个新进程的呢?这就需要我们更深⼊的剖析fork 函数。

1.1 fork函数的返回值调⽤fork创建进程时,原进程为⽗进程,新进程为⼦进程。

运⾏man fork后,我们可以看到如下信息:#include <unistd.h>pid_t fork(void);fork函数有两个返回值,⼦进程中返回0,⽗进程返回⼦进程pid,如果创建失败则返回-1。

实际上,当我们调⽤fork后,系统内核将会做:分配新的内存块和内核数据结构(如task_struct)给⼦进程将⽗进程的部分数据结构内容拷贝⾄⼦进程添加⼦进程到系统进程列表中fork返回,开始调度1.2 写时拷贝在创建进程的过程中,默认情况下,⽗⼦进程共享代码,但是数据是各⾃私有⼀份的。

如果⽗⼦只需要对数据进⾏读取,那么⼤多数的数据是不需要私有的。

这⾥有三点需要注意:第⼀,为什么⼦进程也会从fork之后开始执⾏?因为⽗⼦进程是共享代码的,在给⼦进程创建PCB时,⼦进程PCB中的⼤多数数据是⽗进程的拷贝,这⾥⾯就包括了程序计数器(PC)。

由于PC中的数据是即将执⾏的下⼀条指令的地址,所以当fork返回之后,⼦进程会和⽗进程⼀样,都执⾏fork之后的代码。

第⼆,创建进程时,⼦进程需要拷贝⽗进程所有的数据吗?⽗进程的数据有很多,但并不是所有的数据都要⽴马使⽤,因此并不是所有的数据都进⾏拷贝。

⼀般情况下,只有当⽗进程或者⼦进程对某些数据进⾏写操作时,操作系统才会从内存中申请内存块,将新的数据拷写⼊申请的内存块中,并且更改页表对应的页表项,这就是写时拷贝。

原理如下图所⽰:第三,为什么数据要各⾃私有?这是因为进程具有独⽴性,每个进程的运⾏不能⼲扰彼此。

1.3 fork函数的⽤法及其调⽤失败的原因fork函数的⽤法:⼀个⽗进程希望复制⾃⼰,通过条件判断,使⽗⼦进程分流同时执⾏不同的代码段。

实验二 进程管理(linux)

实验二 进程管理(linux)

实验二进程管理(Linux)一、实验类型本实验为设计性实验。

二、实验目的与任务1)加深对进程概念的理解,明确进程和程序的区别。

2)进一步认识并发执行的实质三、预习要求1)进程的概念2)进程控制的概念及内容3)进程的并发执行4)熟悉互斥的概念5)用到的Linux函数有:fork(),lockf()等。

四、实验基本原理使用fork()系统调用来创建一个子进程,父进程和子进程并发执行,交替输出结果。

使用lockf()系统调用对临界区进行加锁操作,实现对共享资源的互斥使用。

五、实验仪器与设备(或工具软件)实验设备:计算机一台,软件环境要求: Linux操作系统和gcc编译器。

六、实验内容1)进程的创建编写一段程序,使用系统调用fork( ) 创建两个子程序。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。

运行程序10次,观察记录屏幕上的显示结果,并分析原因。

2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程间的互斥,观察并分析出现的现象。

(1)进程的创建参考程序如下:#include<stdio.h>main(){int p1,p2;while((p1=fork())==-1); //p父进程p1子进程1if(p1!=0){while(((p2=fork())==-1); //p父进程p2子进程2if(p2==0) putchar('b');else putchar('c');}else putchar('a');}运行结果:略cab bca bac分析:原因:Fork()函数有三个返回值:1.-1 执行不成功2.0 表示当前正在执行子进程3.其他数值表示当前正在执行父进程,值是子进程的进程标识符PID4.获取当前进程的标识符getpid()5.获取当前进程的父进程的标识符getppid()(2)进程的控制参考程序如下#include<stdio.h>main(){int p1,p2,i;while ((p1=fork())==-1); // 父进程p,子进程p1if(p1==0){for(i=0;i<500;i++)printf("child_p1_ %d\n",i);}else{while((p2=fork())==-1);//父进程p,子进程p2if(p2==0)for(i=0;i<500;i++)printf("chind_p2_ %d\n",i);else for(i=0;i<500;i++)printf("father_p_%d\n",i);}}运行结果:略分析:由于函数printf()输出和字符串之间不会被中断,因此字符串内部的字符顺序输出不变。

操作系统课程设计Linux

操作系统课程设计Linux

操作系统课程设计Linux一、教学目标本课程的教学目标是使学生掌握Linux操作系统的核心概念、原理和应用技能。

通过本课程的学习,学生将能够:1.理解操作系统的基本原理,包括进程管理、内存管理、文件系统和输入/输出系统。

2.掌握Linux操作系统的安装、配置和管理方法。

3.熟练使用Linux命令行界面,进行日常操作和系统管理。

4.掌握Linux常用命令、 shell脚本编写和系统监控工具的使用。

5.了解Linux操作系统在服务器、嵌入式设备和云计算等领域的应用。

二、教学内容本课程的教学内容分为五个部分:1.操作系统概述:介绍操作系统的定义、功能和分类,以及Linux操作系统的历史和发展。

2.进程管理:讲解进程的基本概念、进程控制、进程同步和互斥、死锁及其解决方法。

3.内存管理:介绍内存分配与回收策略、内存保护、虚拟内存和分页分段机制。

4.文件系统:讲解文件和目录结构、文件访问控制、文件系统性能优化和磁盘空间分配策略。

5.输入/输出系统:介绍I/O设备管理、中断和DMA机制、设备驱动程序和I/O调度策略。

三、教学方法本课程采用多种教学方法相结合的方式,以提高学生的学习兴趣和主动性:1.讲授法:教师讲解操作系统的核心概念和原理,引导学生掌握基本知识。

2.讨论法:学生针对实际案例和问题进行讨论,培养学生的思考和分析能力。

3.案例分析法:分析Linux操作系统的实际应用案例,使学生了解操作系统的应用场景。

4.实验法:安排实验室课时,让学生亲自动手进行系统安装、配置和调试,提高学生的实践能力。

四、教学资源本课程的教学资源包括:1.教材:选用权威、实用的Linux操作系统教材,如《Linux操作系统原理与应用》。

2.参考书:提供相关的学术论文、技术博客和在线文档,供学生拓展阅读。

3.多媒体资料:制作课件、教学视频和演示文稿,辅助学生理解和记忆。

4.实验设备:提供Linux服务器、虚拟机和实验室环境,让学生进行实际操作。

linux期末课程设计

linux期末课程设计

linux期末课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:学生需要掌握Linux操作系统的基本概念、原理和常用的命令行操作。

具体包括Linux的历史、特点和常用发行版;文件系统结构;基本命令行操作;用户和权限管理;进程管理;网络配置和应用服务等。

2.技能目标:学生能够熟练使用Linux操作系统,进行日常的系统管理和维护工作。

具体包括文件操作、目录管理、文本处理、软件安装和更新、系统设置和网络配置等。

3.情感态度价值观目标:学生通过课程的学习,能够理解Linux开源精神的重要性,培养团队合作和分享的意识,提高自主学习和解决问题的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.Linux概述:介绍Linux操作系统的起源、发展和特点,以及常用的Linux发行版。

2.文件系统:讲解Linux的文件系统结构,包括目录、文件权限和文件操作命令等。

3.命令行操作:深入学习Linux的命令行操作,包括基本命令、文本处理命令和软件包管理命令等。

4.用户和权限管理:介绍Linux的用户管理、组管理和文件权限控制等知识。

5.进程管理:讲解Linux的进程概念、进程控制命令和进程监控工具等。

6.网络配置:包括网络配置命令、网络文件共享和远程登录等知识。

7.应用服务:介绍Linux下的常用服务,如Apache、MySQL和Samba 等。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解Linux的基本概念、原理和命令操作。

2.案例分析法:通过实际案例,引导学生学会解决实际问题。

3.实验法:安排实验课,让学生亲自动手操作,加深对知识的理解和记忆。

4.小组讨论法:学生进行小组讨论,培养团队合作和沟通能力。

四、教学资源本课程的教学资源包括以下几个方面:1.教材:选用权威、实用的Linux教材,为学生提供系统的学习资料。

2.参考书:提供丰富的参考书籍,方便学生深入研究。

Linux程序设计上机指导书3:Linux进程控制

Linux程序设计上机指导书3:Linux进程控制

,也可以在程 而exec 调 exec 前后的进上机三:Linux 进程控制1. 目的(1)掌握系统调用fork(),exex(),exit() 等实现进程创建;(2) 掌握进程的终止方式(return 、exit 、_exit 、abort ); (3) 掌握僵尸进程的产生和避免,以及 wait,waitpid 的使用;(4 )了解守护进程的创建。

2. 内容主要上机分析代码文件。

systemtest.c 6-3.C 6-4.C 6-8.C 6-9.C 其他略。

3. 步骤1) Linux 进程的创建创建进程可以采用几种方式。

可以执行一个程序(这会导致新进程的创建) 序内调用一个 fork 或exec 来创建新进程。

fork 调用会导致创建一个子进程, 用则会用新程序代替当前进程上下文。

exec 系列函数并不创建新进程,调用程ID 是相同的。

exec 系列函数如下。

exec函数的主要工作是清除父进程的可执行代码映像,用新程序的代码覆盖调用exec 的进程代码。

如果 exec执行成功,进程将从新程序的main函数入口开始执行。

调用 exec后,除进程ID保持不变外,还有下列进程属性也保持不变。

(1) 进程的父进程ID。

(2) 实际用户ID和实际用户组ID。

(3) 进程组ID、会话ID和控制终端。

(4) 定时器的剩余时间。

(5) 当前工作目录及根目录。

(6) 文件创建掩码UMASK。

(7) 进程的信号掩码。

与exec系统调用不同,system 将外部可执行程序加载执行完毕后继续返回调用进程。

system的返回值就是被加载的程序的返回值。

【例6.3】设计一个程序,用fork函数创建一个子进程,在子进程中,要求显示子进程号与父进程号,然后显示当前目录下的文件信息,在父进程中同样显示子进程号与父进程号/*6-3.c 将一个进程分为两个一样的进程,打印出进程的相关信息*/#i nclude<stdio.h> /*文件预处理,包含标准输入输出库*/#i nclude<stdlib.h> /*文件预处理,包含system、exit等函数库*/#in clude< uni std.h> /*文件预处理,包含 fork、getpid、getppid 函数库*/#in clude<sys/types.h> /*文件预处理,包含fork函数库*/int mai n () /*C程序的主函数,开始入口*/result=fork(); /*调用fork函数,返回值存在变量result中*/6-3.c -Q 6-3【步骤1】设计编辑源程序代码。

linux 中的进程处理和控制方式

linux 中的进程处理和控制方式

linux 中的进程处理和控制方式Linux 是一种广泛使用的操作系统,它具有强大的进程处理和控制功能。

在 Linux 系统中,进程是进行任务的基本单位,它们可以同时运行,互相通信,共享资源,因此进程处理和控制是 Linux 系统重要的组成部分。

Linux 提供了多种方式来处理和控制进程。

以下是一些常见的方式:1. 创建新进程:在 Linux 系统中,可以通过 fork() 系统调用创建一个新的子进程。

子进程是通过复制父进程的内存空间、文件描述符和其他资源来创建的。

这样可以实现并行处理任务,提高系统的效率。

创建新进程时,可以使用 exec() 系统调用来加载一个新的程序运行。

2. 进程调度:Linux 使用调度器(scheduler)来决定哪个进程在何时执行。

调度算法会根据进程的优先级(priority)和调度策略来决定进程的执行顺序。

常见的调度策略包括先进先出(FIFO)、最短作业优先(SJF)、轮转(Round Robin)等。

通过合理的调度算法,可以提高系统的响应速度和资源利用率。

3. 进程间通信:在 Linux 中,进程之间可以通过多种方式进行通信。

其中最常用的方式是通过管道(pipe)、信号(signal)和共享内存(shared memory)来进行进程间的数据交换。

管道可以实现进程的单向通信,信号可以用于进程之间的异步通信,而共享内存可以让多个进程共享同一片内存区域,实现高效的数据交换。

4. 进程控制:Linux 提供了多个命令和系统调用来控制进程的行为。

例如,可以使用 ps 命令来查看系统中正在运行的进程,使用kill 命令发送信号终止进程,使用 nice 命令来改变进程的优先级等。

此外,还可以使用进程控制信号(Process Control Signals)来改变进程的状态,如暂停、继续、停止等。

5. 进程管理工具:Linux 提供了一些进程管理工具来帮助用户更方便地处理和控制进程。

操作系统原理实验4-进程控制

操作系统原理实验4-进程控制

《操作系统原理》实验报告
实验序号:4 实验项目名称:进程控制
一、实验目的及要求
1. 加深对进程信号量的理解。

2. 理解进程同步与互斥机制。

3. 掌握Linux操作系统下的进程控制编程。

二、实验设备(环境)及要求
1.虚拟机VMware Workstation、Ubuntu操作系统和C语言编程。

2.编写一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Ctrl C键),当捕捉到中断信号后,父进程调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下面信息后终止:
child process 1 is killed by parent!
child process 2 is killed by parent!
父进程等待两个子进程终止后,输出以下信息后终止:
parent process is killed!
三、实验内容与步骤
代码:
在终端上进行测试
四、实验结果与数据处理
五、分析与讨论
了解了计算机进程的管理以及signal()函数的作用。

六、教师评语成绩。

进程管理操作系统linux实验

进程管理操作系统linux实验

实验进程管理(一)进程的创建实验实验目的1、掌握进程的概念,明确进程的含义2、认识并了解并发执行的实质实验内容1、编写一段程序,使用系统调用fork()创建两个子进程。

当此程序运行时,在系统中有一个父进程和两个子进程活动。

让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。

试观察记录屏幕上的显示结果,并分析原因。

2、修改上述程序,每一个进程循环显示一句话。

子进程显示'daughter…'及'son ……',父进程显示'parent ……',观察结果,分析原因。

实验准备(1)阅读LINUX的fork.c源码文件(见附录二),分析进程的创建过程。

(2)阅读LINUX的sched.c源码文件(见附录三),加深对进程管理概念的认识。

实验指导一、进程UNIX 中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。

一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、共享存储区等。

每个区又分为若干页,每个进程配置有唯一的进程控制块PCB,用于控制和管理进程。

PCB 的数据结构如下:1、进程表项(Process Table Entry)。

包括一些最常用的核心数据:进程标识符PID、用户标识符UID、进程状态、事件描述符、进程和U区在内存或外存的地址、软中断信号、计时域、进程的大小、偏置值nice、指向就绪队列中下一个PCB 的指针P_Link、指向U 区进程正文、数据及栈在内存区域的指针。

2、U 区(U Area)。

用于存放进程表项的一些扩充信息。

每一个进程都有一个私用的U区,其中含有:进程表项指针、真正用户标识符u-ruid(read user ID)、有效用户标识符u-euid(effective user ID)、用户文件描述符表、计时器、内部I/O参数、限制字段、差错字段、返回值、信号处理数组。

linux教案_高校教学

linux教案_高校教学

Linux教案_高校教学教案内容:一、Linux简介1.1 了解Linux的发展历程1.2 了解Linux的核心理念(开放、自由软件)1.3 了解Linux的发行版(如Ubuntu、CentOS、Fedora等)1.4 掌握Linux在实际应用中的优势和劣势二、Linux安装与配置2.1 学习Linux安装流程(硬盘安装、光盘安装、虚拟机安装等)2.2 学习Linux文件系统结构2.3 学习Linux基本操作命令(如文件操作、目录操作、文本处理等)2.4 掌握Linux桌面环境(如GNOME、KDE等)的基本操作三、Linux文件权限与管理3.1 学习Linux文件权限概念(读、写、执行)3.2 学习文件权限的表示方法(数字表示法、符号表示法)3.3 学习如何修改文件权限(chmod、chown等命令)3.4 掌握Linux文件权限的实际应用场景四、Linux用户管理4.1 学习Linux用户和组的概念4.2 学习用户管理的命令(如useradd、usermod、userdel等)4.3 学习组管理的命令(如groupadd、groupmod、groupdel等)4.4 掌握Linux用户和组的实际应用场景五、Linux进程管理5.1 学习Linux进程概念5.2 学习如何查看进程(ps、top等命令)5.3 学习如何控制进程(start、stop、restart等)5.4 掌握Linux进程管理的实际应用场景六、Linux网络配置与通信6.1 学习Linux网络配置文件(/etc/network/interfaces)6.2 学习Linux网络命令(ifconfig、ping、netstat等)6.3 掌握Linux网络配置与诊断的实际应用6.4 了解Linux下的网络资源共享(Samba、NFS等)七、Linux软件管理7.1 学习Linux软件包管理工具(如apt-get、yum等)7.2 学习Linux软件安装、更新和卸载的方法7.3 掌握Linux软件管理的实际应用场景7.4 了解开源软件和Linux发行版之间的关系八、Linux文本处理工具8.1 学习Vim编辑器的基本使用方法8.2 学习Linux下的文本处理工具(如grep、sed、awk等)8.3 掌握文本处理在Linux中的实际应用场景8.4 进行简单的编程练习,巩固文本处理技能九、Linux Shell脚本编程9.1 学习Shell脚本的基本概念与结构9.2 学习如何在Linux中编写、执行Shell脚本9.3 掌握Shell脚本编程的基本技巧(变量、循环、条件判断等)9.4 进行简单的Shell脚本编程练习,实际应用所学知识十、Linux系统安全10.1 学习Linux系统安全的基本概念10.2 学习Linux文件系统安全(权限设置、文件加密等)10.3 学习Linux网络安全(防火墙、SSH等)10.4 掌握Linux系统安全管理的实际应用场景10.5 了解Linux安全漏洞修复和补丁管理的基本方法十一、Linux系统监控与性能优化11.1 学习系统监控工具(如top, htop, vmstat等)11.2 学习Linux性能优化方法(CPU、内存、磁盘I/O优化)11.3 掌握系统监控与性能优化的实际应用场景11.4 了解系统调优在提高系统稳定性、性能方面的作用十二、Linux存储管理12.1 学习Linux文件系统(ext4, XFS, Btrfs等)12.2 学习Linux逻辑卷管理(LVM)12.3 学习Linux磁盘阵列管理(RD)12.4 掌握存储管理在实际应用中的配置与优化十三、Linux备份与恢复13.1 学习Linux下备份工具的使用(如tar, rsync等)13.2 学习系统备份与恢复策略的制定13.3 掌握数据备份与恢复的实际操作流程13.4 了解灾难恢复方案的制定与实施十四、Linux服务器配置与管理14.1 学习Web服务器配置(如Apache, Nginx)14.2 学习文件服务器配置(如Samba, NFS)14.3 学习邮件服务器配置(如Postfix, Dovecot)14.4 学习数据库服务器配置(如MySQL, PostgreSQL)14.5 掌握服务器管理的最佳实践与安全策略十五、Linux项目实践15.1 学习Linux项目开发流程与方法15.2 完成一个简单的开源项目贡献(如代码提交、bug修复等)15.3 了解开源社区参与方式与规范15.4 掌握Linux在实际项目中的应用与部署重点和难点解析本文教案主要分为十五个章节,涵盖了Linux的基本概念、安装与配置、文件权限与管理、用户管理、进程管理、网络配置与通信、软件管理、文本处理工具、Shell脚本编程、系统安全、系统监控与性能优化、存储管理、备份与恢复、服务器配置与管理以及项目实践等方面。

linux课程设计报告

linux课程设计报告

linux课程设计报告一、课程目标知识目标:1. 理解Linux操作系统的基本概念,掌握其发展历程和特点;2. 学会使用Linux命令行进行基本操作,如文件管理、目录切换、文本编辑等;3. 了解Linux系统的文件权限和用户管理,能够进行简单的系统维护;4. 掌握Linux下软件的安装与配置方法。

技能目标:1. 培养学生熟练运用Linux命令行进行日常操作的能力;2. 培养学生解决Linux系统常见问题的能力;3. 培养学生独立完成Linux软件安装与配置的能力;4. 提高学生的实际操作能力和团队协作能力。

情感态度价值观目标:1. 激发学生对Linux操作系统的兴趣,培养其学习热情和主动性;2. 培养学生严谨、细致的学习态度,树立良好的信息安全意识;3. 增强学生的团队协作精神,培养其尊重他人、善于沟通的品格;4. 引导学生认识到开源软件的价值,培养其创新精神和共享意识。

课程性质:本课程为实践性较强的课程,以学生动手操作为主,结合理论讲解,培养学生实际应用能力。

学生特点:学生具备一定的计算机操作基础,对Linux操作系统有一定了解,但实践经验不足。

教学要求:注重理论与实践相结合,强调实际操作能力的培养,以学生为主体,教师为主导,充分调动学生的积极性与主动性。

通过本课程的学习,使学生能够掌握Linux操作系统的基本知识,具备实际应用能力。

在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. Linux操作系统概述- Linux发展历程- Linux系统特点- 常见Linux发行版介绍2. Linux命令行操作- 基本命令:ls、cd、pwd、mkdir、rm、cp、mv等- 文件和目录权限管理:chmod、chown、umask等- 文本处理命令:cat、grep、sort、uniq等- 压缩和解压缩命令:tar、gzip、bzip2等3. Linux系统管理- 用户和组管理:useradd、usermod、userdel、groupadd等- 软件包管理:rpm、yum、apt等- 系统启动与关闭:init、systemctl等- 网络配置:ifconfig、ip、route等4. Linux软件安装与配置- 源码编译安装:configure、make、make install- 包管理器安装:rpm、deb等- 常用软件安装与配置:Apache、MySQL、PHP等5. 实践操作与案例- 常见系统问题排查与解决- Linux下文件共享与权限设置- Linux下Web服务器搭建- Linux下数据库服务器搭建教学内容安排与进度:第1周:Linux操作系统概述第2周:Linux命令行操作第3周:Linux系统管理第4周:Linux软件安装与配置第5周:实践操作与案例本教学内容根据课程目标,结合教材章节进行选择和组织,确保内容的科学性和系统性。

大学课程设计linux

大学课程设计linux

大学课程设计linux一、教学目标本课程的目标是使学生掌握Linux操作系统的基本原理和使用方法,包括Linux的文件系统、进程管理、用户管理、网络配置等,培养学生具备独立安装、配置和管理Linux系统的能力。

在知识目标方面,要求学生了解Linux操作系统的历史、特点和发展趋势,掌握Linux的基本命令和操作,理解Linux的文件系统结构和磁盘管理,熟悉Linux 的用户和群组管理,了解Linux的网络配置和系统安全。

在技能目标方面,要求学生能够独立安装Linux操作系统,熟练使用Linux的基本命令,掌握文件和目录的管理、文本处理和进程监控,能够配置用户和群组,设置文件权限和所有权,能够配置和管理Linux的网络,了解系统安全和防火墙的基本设置。

在情感态度价值观目标方面,要求学生通过课程的学习,培养对Linux操作系统的兴趣和好奇心,增强自主学习和解决问题的能力,培养良好的编程习惯和团队合作精神,提高信息素养和职业道德。

二、教学内容本课程的教学内容主要包括Linux操作系统的基本原理和使用方法,具体包括以下几个方面:1.Linux概述:介绍Linux操作系统的历史、特点和发展趋势,Linux的发行版和安装方法。

2.Linux基本命令:讲解Linux的基本命令和使用方法,包括文件和目录管理、文本处理和进程监控。

3.Linux文件系统:介绍Linux的文件系统结构和磁盘管理,包括文件权限和所有权的设置,文件系统的挂载和卸载。

4.Linux用户和群组管理:讲解Linux的用户和群组管理,包括用户和群组的创建、删除和权限设置。

5.Linux网络配置:介绍Linux的网络配置和管理,包括网络接口的配置、IP地址的分配、网络服务的开启和关闭。

6.Linux系统安全:讲解Linux的系统安全和防火墙的设置,包括用户权限的控制、文件安全的保护、网络安全的防范。

三、教学方法本课程的教学方法主要包括讲授法、实践法和讨论法,通过多样化的教学方法,激发学生的学习兴趣和主动性。

Linux实验五 Linux进程管理

Linux实验五  Linux进程管理

实验五Linux进程管理一、实验目的1.掌握Linux进程管理。

2.学习并掌握进程查看命令、进程终止命令。

3.使用at和cron服务实现Linux进程调度。

二、实验环境安装了Red Hat Linux9.0系统的计算机一台三、实验过程(实验步骤、记录、数据、分析、结果)(一)进程查看、终止、挂起及暂停等操作1、使用ps命令查看和控制进程1)显示本用户进程#ps分析:显示进程:shell和ps2)显示所有用户的进程#ps –au分析:显示共有8个进程3)在后台运行cat命令#cat&分析:PID为27244)查看进程cat#ps aux |grep cat5)杀死进程cat#kill -9 cat6)再次查看进程cat,看看是否被杀死。

分析:结果显示已经杀死cat2、使用top命令查看和控制进程1)用top命令动态显示当前的进程。

分析:显示当前的进程2)只显示某一用户的进程(u)分析:pm进程的PID为123)杀死指定进程号的进程(k)3、挂起和恢复进程1)执行命令cat分析:重新执行cat命令,PID号变成28852)按【ctrl+z】挂起进程3)输入jobs命令,查看作业分析:按【ctrl+z】挂起进程后,用jobs命令查看作业,cat被挂起。

4)输入bg,把cat切换到后台执行5)输入fg,把cat切换到前台执行6)按【ctrl+c】结束进程(二)通过at命令实现计划任务1、5分钟后执行/bin/date#at now+5minutesat>/bin/dateat><EOT>(提示:输入【ctrl+d】job任务号at 年-月-日小时:分钟如何查看结果?2、查找系统中任何以c为后缀名的文档,将结果保存到$HOME/findc文件中,指定时间为2016年12月01日早上8点#at 8am 12/01/16at>find / -name ‘*.c’ >$HOME/findcat><EOT>job任务号at 年-月-日小时:分钟如何查看结果?分析:指定时间必须要在当前时间之后,将12月1日16点改为12月28日16点3、2题的命令写到$HOME/findjob中,使用at命令执行,并将结果保存到$HOME/findfc文件中,指定时间为当前时间后5分钟#vi $HOME/findjob内容如下:find / -name ‘*.c’ >$HOME/findfc存盘退出#at –f $HOME/findjob now+5minutes4、at命令实现在30天后统计/etc/inittab文件的行数,将统计结果发送至$HOME/initline文件中#at now+3daysat>wc –l /etc/inittab>>$HOME/initlineat><EOT>5、列出现有的所有at任务,并记下相关信息分析:5分钟已过去,第一个at计划已经执行,上面3个计划等待执行。

进程控制 实验报告

进程控制 实验报告

进程控制实验报告进程控制实验报告一、引言进程控制是操作系统中的重要概念,它涉及到进程的创建、调度、终止等方面。

本篇实验报告将介绍我们在进程控制实验中所进行的工作和实验结果。

二、实验目的本次实验的目的是通过编写程序,了解进程的创建、调度和终止过程,并掌握相关的系统调用和操作。

三、实验环境我们使用的实验环境是Linux操作系统,并使用C语言编写程序。

四、实验步骤1. 进程创建在实验中,我们编写了一个简单的程序,用于创建新的进程。

通过调用系统调用fork(),我们可以在父进程中创建一个子进程。

子进程是父进程的副本,它们共享一些资源,但有各自独立的执行空间。

2. 进程调度在实验中,我们使用了系统调用exec()来进行进程调度。

通过调用exec(),我们可以在一个进程中执行另一个可执行文件。

这样,原来的进程将被替换为新的进程,并开始执行新的程序。

3. 进程终止在实验中,我们使用了系统调用exit()来终止一个进程。

当一个进程执行完毕或者遇到错误时,可以调用exit()来结束自己的执行。

同时,exit()函数还可以传递一个整数值作为进程的返回值,供其他进程获取。

五、实验结果通过实验,我们成功地创建了多个进程,并进行了调度和终止操作。

我们观察到,创建的子进程在父进程的基础上执行,并且具有独立的执行空间。

在调度过程中,我们能够看到进程的切换和执行结果的输出。

在终止过程中,我们成功地结束了进程的执行,并获取了进程的返回值。

六、实验总结通过本次实验,我们深入了解了进程控制的相关概念和操作。

我们通过编写程序,实际操作了进程的创建、调度和终止过程。

这些实验结果对于我们理解操作系统的工作原理和进程管理机制具有重要意义。

七、实验感想本次实验让我们深刻认识到进程控制在操作系统中的重要性。

进程的创建、调度和终止是操作系统能够高效运行的基础。

通过实验,我们不仅掌握了相关的系统调用和操作,还加深了对操作系统原理的理解。

八、实验改进在实验中,我们可以进一步扩展功能,例如实现进程间的通信和同步机制。

Linux进程控制实验报告1

Linux进程控制实验报告1

Linux进程控制实验报告实验名称: Linux进程控制实验要求: 一.编写一个Linux系统C程序,由父亲创建2个子进程,再由子进程各自从控制台接收一串字符串,保存在各自的全局字符串变量中,然后正常结束。

父进程调用waitpid等待子进程结束,并分别显示每个子进程的进程标识号和所接收的字符串。

二.父进程创建一子进程,父进程向子进程发送数据,子进程接收数据,并写入文件。

关键问题:一.需要用共享内存或使用vfork()函数创建子进程进行进程之间的数据共享及传递。

父进程必须等待子进程结束才能继续执行。

二.注意信号的使用。

子进程需等待父进程发送信号才执行相应操作。

父,子进程之间的通信需要用到共享内存或者父进程用vfork()创建子进程。

设计思路:一.使用共享内存实现数据共享,子进程一用shmaddr1保存输入的字符串,子进程二用shmaddr2保存字符串。

父进程等待两个子进程分别输入完字符串,然后再分别把数据显示出来。

二.用共享内存的方法来实现父子进程之间的通信,首先建立共享内存区域,然后建立子进程,并让子进程等待父进程信号。

在父进程中输入字符串,并把此字符串保存在共享内存区域,然后向子进程发出信号SIGUSR1,若子进程接受到SIGUSR1信号,则把父进程保存在共享内存区域的字符串取出,并把它写入文件。

关键代码:一.#include <unistd.h>#include <stdio.h>#include </usr/include/sys/types.h>#include <string.h>#include <unistd.h>#include <sys/ipc.h>#include <sys/shm.h>#define KEY 1234#define SIZE 64char* shmaddr1;char* shmaddr2;main(){pid_t pid1;pid_t pid2;char* str1;char* str2;int shmid1;int shmid2;shmid1=shmget(23,SIZE,IPC_CREAT|0600);shmid2=shmget(24,SIZE,IPC_CREAT|0600);if ((pid1=fork())<0){printf("creat 1 fail!\n");exit(0);}else if(pid1==0){shmaddr1=(char*)shmat(shmid1,NULL,0);printf("creat 1 successfully!\n");scanf("%s",str1);printf("you enter:%s\n",str1);strcpy(shmaddr1,str1);shmdt(shmaddr1);exit(0);}wait();if ((pid2=fork())<0){printf("creat 2 fail!\n");exit(0);}else if(pid2==0){shmaddr2=(char*)shmat(shmid2,NULL,0);printf("creat 2 successfully!\n");scanf("%s",str2);printf("you enter:%s\n",str2);strcpy(shmaddr2,str2);shmdt(shmaddr2);exit(0);}wait();shmaddr1=(char*)shmat(shmid1,NULL,0);shmaddr2=(char*)shmat(shmid2,NULL,0);printf("one is %s\n",shmaddr1);printf("two is %s\n",shmaddr2);shmdt(shmaddr1);shmdt(shmaddr2);shmctl(shmid1,IPC_RMID,NULL);shmctl(shmid2,IPC_RMID,NULL);exit(0);}实验结果:二.#include<signal.h>#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/ipc.h>#include<sys/shm.h>#define key 1024#define size 160static void sign(int);int shmid;char* shmaddr;main(){pid_t pid;char str[20];shmid=shmget(key,size,IPC_CREAT|0600);if((pid=fork())<0){perror("创建子进程错误!\n");exit(0);}else if(pid==0){if(signal(SIGUSR1,sign)==SIG_ERR){printf("SIGUSR1错误!\n");exit(0);}pause();printf("子进程结束!\n");exit(0);}sleep(1);shmaddr=(char*)shmat(shmid,NULL,0);printf("请输入字符串:");scanf("%s",str);strcpy(shmaddr,str);shmdt(shmaddr);kill(pid,SIGUSR1);wait();shmctl(shmid,IPC_RMID,NULL);}static void sign(int signnum){int fd;char* shmaddr;if(signnum==SIGUSR1){printf("子进程接收到SIGUSR1.\n");shmaddr=(char*)shmat(shmid,NULL,0);if((fd=open("testfile.txt",O_RDWR|O_CREAT|O_TRUNC))==-1){printf("\n打开文件错误!\n");return 0;}else{printf("写入:%s\n",shmaddr);write(fd,shmaddr,20);close(fd);}shmdt(shmaddr);}}实验总结:经过此次实验,我学会了如何通过shm共享内存实现各进程间的数据共享,以及如何在父子进程之间发送信号和传输数据以及一些保存文件的操作,通过这次实验我受益良多。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告课程名称Linux操作系统课程设计指导教师张玲起止日期2014-03-01 至2014-06-13实验项目实验二进程控制学院信息与通信工程学院专业电子信息工程学生姓名班级/学号成绩指导老师签字1. 课程设计概述本次课设意在利用进程控制相关的系统调用编程进行进程控制实验,观察进程从创建、运行到终止的控制过程,加深对进程概念的理解。

1.1 课程设计的目的本实验的目的是掌握进程的概念,理解进程的创建、执行、等待、终止的过程。

熟悉有关进程控制的命令和系统调用,理解Shell 的工作原理。

1.2 课程设计的内容1) 进程控制命令● 使用进程控制命令ps ,kill 监视和控制进程的活动2) 编程部分● 用fork ,wait ,exec 系统调用编程实现进程控制;● 编写一个简单的shell 。

1.3 设计原理进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。

构建的文件构架如图:图1 实验目录树的结构 2012010948exp2 exp1 exp3vis vis22.实验步骤2.1操作2.1.1进程控制命令(在此终端窗口的操作截图见图1)1.执行ps命令,查看bash进程的PID:PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。

进程中止后PID被系统回收。

2.在后台运行一个yes进程:yes > /dev/null &3.用ps -f命令观察yes进程的pid和ppid,用ps u命令观察yes进程的状态。

yes进程的父进程是哪个进程?通过查看yes程序的PPID可知其父进程为bash4.根据命令名搜索特定的进程:ps-ef|grep yes:5.用kill命令杀掉yes进程:kill 【PID】:图1 进程控制命令2.1.2进程控制系统调用(此部分操作截图见图2、3)1.利用fork()和wait()来控制进程的执行:♦在exp2目录下编写一个程序fork_wait.c。

该程序用fork创建了一个子进程,而后子进程先输出自己的信息,再睡眠10秒后结束。

父进程等待子进程,收集到子进程结束信息后输出信息,然后结束。

编译:gcc-o fork_wait fork_wait.c 运行:./fork_wait♦修改此程序,使父进程先睡眠一段时间,然后再收集(wait)子进程。

重新编译并在后台运行该程序(./fork_wait &),在子进程已终止而父进程尚未收集它时,用ps u观察子进程的僵尸状态。

在父进程分支的开始处调用函数sleep(40)睡眠40秒。

用ps u可以看见一个Z2.利用exec()置换程序的执行代码文件:♦在exp2目录下编写一个程序exec_test.c,使子进程执行另一个程序,如echo。

编译:gcc-o exec_test exec_test.c 运行:./exec_test♦修改程序exec_test.c,使子进程执行一个可持续运行一段时间命令,重新编译并在后台运行程序(./exec_test &),用ps -f 命令观察子进程执行的命令名CMD。

添加一句sleep 40。

即:execl("/bin/sleep", "sleep", "40", NULL);图2 进程控制系统调用-fork_wait图2 进程控制系统调用-fork_wait2.1.3Mini Shell编程(此部分操作截图见图4、5)1.在exp2目录编写一个简单的shell程序—Mini Shell,它接收输入的命令并解释执行。

♦Linux的命令分为内部命令和外部命令两种。

内部命令由Shell程序自己实现,如cd、pwd等,外部命令是位于磁盘上(多数在/bin和/usr/bin目录下)的可执行程序。

Mini Shell只实现两个内部命令:pwd和quit(退出),它可执行所有不带选项和参数的外部命令,如date、who、cal、ls等。

2.(选做1)修改Mini Shell程序,使它可执行只带一个命令选项或参数的命令行,如ls -a、cat file、echo hello等。

♦用strtok函数将读入的命令行cmd以空格为分隔符拆为两个字符串cmd1和cmd2:cmd1=strtok(cmd," ");cmd2=strtok(NULL," ");此时的cmd1即为命令名,cmd2即为命令的选项或参数。

判断cmd2,若为空则执行系统调用execlp(cmd1, cmd1, NULL),否则执行execlp(cmd1, cmd1, cmd2, NULL)3.(选做2)修改Mini Shell程序,可做任何你认为可以改进的修改,如界面、提示、处理输入错误、增强功能等。

图4 Mini Shell编程-1图5 Mini Shell-2图6 Mini Shell-33.实验结论与评价3.1进程控制命令此部分操作较为简单,主要在帮助理解进程的概念和进程的PID,掌握基本的进程操作如ps kill 和后台运行一个程序等。

通过这一部分的操作我了解到进程是什么,进程和程序有什么不一样,子进程和父进程之间的关系。

3.2进程控制系统调用fork_wait是本次实验的第一个编程题,通过已经给好的代码我了解到了几个在Linux中常用的函数,如sleep(),getpid(),fork(),wait() 等,我更加清晰地在修改程序的过程中理解了子进程和父进程的关系,更重要的是我学会了通过简单函数来对进程进行控制。

观察到了特殊的僵尸进程:僵尸进程(zombie)是指已终止运行,但尚未被清除的进程。

exec_test是本次试验的第二个编程题,这次学习到的函数是execl(),第一参数path字符指针所指向要执行的文件路径,接下来的参数代表执行该文件时传递的参数列表:argv[0],argv[1]... 最后一个参数用空指针NULL作结束。

利用这个函数实现了用exec()置换程序的执行代码文件的功能。

3.3Mini Shell编程这一部分的操作较为复杂,占用了实验的大部分时间。

让我意识到我们的编程能力还有待提高,尤其是字符串、文件等部分。

选作一的地方通过空格把命令名和参数分开分别执行,需要分清是应该先读命令再分开还是先分开再读命令,选作二我增添了几个Mini Shell内部命令,修改了界面。

4.程序清单4.1fork_wait.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>main(){int rid, cid;printf("****fork-test by 2012010948****\n"); //将your-sid改为你的学号rid = fork();if ( rid < 0 ) printf("error in fork!");else if ( rid == 0 ) { // 子进程printf("I am child, my PID is %d. I will sleep a while.\n", getpid());sleep(10); // 睡眠10秒printf("I am down.\n");}else { // 父进程//sleep(30); //睡眠30秒cid=wait(NULL);printf("I am parent, I caught a child with PID of %d.\n", cid);}exit(0);}}4.2exec_test.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>main(){int rid;printf("****exec-test by 2012010948****\n"); //将your-sid改为你的学号rid = fork();if ( rid < 0 ) printf("error in fork!");else if ( rid == 0 ) { // 子进程printf("I am child, I will change to echo!\n");execl("/bin/echo", "echo", "Hello! ", NULL);}else wait(NULL); // 父进程exit(0);}4.3mini_shell.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>void pwd();main(){int id;char cmd[80];printf("****mini-shell by your-sid****\n"); //将your-sid改为你的学号while(1) {printf("Mini Shell> "); //显示命令提示符fgets(cmd, 80, stdin); //从键盘读入命令行cmd[strlen(cmd)-1]=0; //将行尾字符置为字符串结束符0if ( strcmp(cmd, "quit") == 0 ) exit(0); //内部命令quitif ( strcmp(cmd, "pwd") == 0 ) pwd(); //内部命令pwdelse { //外部命令id=fork();if (id<0) { printf("Fork error!\n"); exit(1);}if ( id == 0 ) {if (execlp(cmd, cmd, NULL)<0)printf("Command error!\n");exit(2);}wait(NULL);}}}void pwd(){char dir[50];getcwd(dir,50);printf("%s\n", dir);}4.4mini_shell.c选作一#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>void pwd();main(){int id;char cmd[80];char* cmd1;char* cmd2;char* cmd3;char y;printf("2012010948\n"); //将your-sid改为你的学号printf("Thank you for using me. Do you want any help?(y/n)");getchar();scanf("%c",&y);if(y='n')printf("thanks");else if(y='y')printf("ok");while(1) {printf("Mini Shell> "); //显示命令提示符fgets(cmd, 80, stdin); // 从键盘读入命令行cmd[strlen(cmd)-1]=0; //将行尾字符置为字符串结束符0cmd1=strtok(cmd," ");cmd2=strtok(NULL," ");cmd3=strtok(NULL," ");if ( strcmp(cmd1, "quit") == 0 ) exit(0); //内部命令quitif ( strcmp(cmd1, "pwd") == 0 ) pwd(); //内部命令pwdelse { //外部命令id=fork();if (id<0) { printf("Fork error!\n"); exit(1);}if ( id == 0 ) {if(cmd2!=NULL){ if(cmd3==NULL){if (execlp(cmd1, cmd1, cmd2,NULL)<0)printf("Command error!\n");exit(2);}else{if (execlp(cmd1, cmd1, cmd2,cmd3,NULL)<0)printf("Command error!\n");exit(2);}}else{if (execlp(cmd1, cmd1,NULL)<0)printf("Command error!\n");exit(2);}}wait(NULL);}}}void pwd(){char dir[50];getcwd(dir,50);printf("%s\n", dir);}4.5mini_shell.c选作二#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>void pwd();main(){int id;char cmd[80];char *cmd1;char *cmd2;printf("********************************\n");printf("****mini-shell by 2012010948****\n"); //将your-sid改为你的学号printf("********************************\n");while(1) {printf("Mini Shell> "); //显示命令提示符fgets(cmd, 80, stdin); //从键盘读入命令行cmd[strlen(cmd)-1]=0; //将行尾字符置为字符串结束符0printf("%s\n", cmd);cmd1=strtok(cmd," ");cmd2=strtok(NULL," "); //将命令行分开成两部分if ( strcmp(cmd, "quit") == 0 ) exit(0); //内部命令quitif ( strcmp(cmd, "where") == 0 ) pwd(); //内部命令pwdif ( strcmp(cmd, "tired") == 0 ) {sleep(5); printf("i'm down\n");} //内部命令pwd else { //外部命令id=fork();if (id<0) { printf("Fork error!\n"); exit(1);}if ( id == 0 ) {if(cmd2==NULL) execlp(cmd1, cmd1, NULL);else execlp(cmd1, cmd1, cmd2, NULL);if (execlp(cmd, cmd, NULL)<0)printf("Command error!\n");exit(2);}wait(NULL);}}}void pwd(){char dir[50];getcwd(dir,50);printf("%s\n", dir);}参考文献[1]张玲. Linux操作系统基础、原理与应用,北京:清华大学出版社,2014年2月。

相关文档
最新文档