实验一——Linux环境下的进程管理(DOC)

实验一——Linux环境下的进程管理(DOC)
实验一——Linux环境下的进程管理(DOC)

软件学院

上机实验报告

课程名称:操作系统

实验项目:实验一:Linux环境下进程管理

实验室:耘慧402 姓名:学号:

专业班级:实验时间:

一、实验目的及要求

1.加深对进程概念的理解,明确进程和程序的区别;

2. 进一步认识并发执行的实质;

3. 分析进程争用资源的现象,学习解决进程互斥的方法;

4. 了解Linux系统中进程通信的基本原理;

二、实验性质

1. 进程的创建:编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。

2. 进程的控制:修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf ()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

3. 用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容;利用wait( )来控制进程执行顺序。

三、实验学时

实验性质:验证性

实验学时: 4学时

实验要求:必做

四、实验环境

1.实验环境: Linux系统开发环境

2.知识准备:

(1) Linux系统开发环境搭建;

(2) Linux环境下GCC编译器的使用;

(3)语言中函数定义与调用、指针和类型的定义与使用、结构的定义、动态内存的申请等预备知识。

五、实验内容及步骤

①实验内容:

(1)进程的创建

编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。

(2)进程的控制

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

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

(3)用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容;利用wait( )来控制进程执行顺序。

②实验步骤:

1.进程的创建

1.1 进程

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参数、限制字段、差错字段、返回值、信号处理数组。

由于UNIX系统采用段页式存储管理,为了把段的起始虚地址变换为段在系统中的物理地址,便于实现区的共享,所以还有:

(3)系统区表项。以存放各个段在物理存储器中的位置等信息。

系统把一个进程的虚地址空间划分为若干个连续的逻辑区,有正文区、数据区、栈区等。这些区是可被共享和保护的独立实体,多个进程可共享一个区。为了对区进行管理,核心中设置一个系统区表,各表项中记录了以下有关描述活动区的信息:区的类型和大小、区的状态、区在物理存储器中的位置、引用计数、指向文件索引结点的指针。

(4)进程区表

系统为每个进程配置了一张进程区表。表中,每一项记录一个区的起始虚地址及指向系统区表中对应的区表项。核心通过查找进程区表和系统区表,便可将区的逻辑地址变换为物理地址。

1.2 进程映像

UNIX系统中,进程是进程映像的执行过程,也就是正在执行的进程实体。它由三部分组成:

(1)用户级上、下文。主要成分是用户程序;

(2)寄存器上、下文。由CPU中的一些寄存器的内容组成,如PC,PSW,SP及通用寄存器等;

(3)系统级上、下文。包括OS为管理进程所用的信息,有静态和动态之分。

1.3 所涉及的系统调用

fork( )

创建一个新进程。

系统调用格式:

pid=fork( )

参数定义:

int fork( )

fork( )返回值意义如下:

0:在子进程中,pid变量保存的fork( )返回值为0,表示当前进程是子进程。

>0:在父进程中,pid变量保存的fork( )返回值为子进程的id值(进程唯一标识符)。

-1:创建失败。

如果fork( )调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork( )被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork( )父进程(parent process)的副本,称为子进程(child process)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。

1.4 核心为fork( )完成以下操作

(1)为新进程分配一进程表项和进程标识符

进入fork( )后,核心检查系统是否有足够的资源来建立一个新进程。若资源不足,则fork( )系统调用失败;否则,核心为新进程分配一进程表项和唯一的进程标识符。

(2)检查同时运行的进程数目

超过预先规定的最大数目时,fork( )系统调用失败。

(3)拷贝进程表项中的数据

将父进程的当前目录和所有已打开的数据拷贝到子进程表项中,并置进程的状态为“创建”状态。

(4)子进程继承父进程的所有文件

对父进程当前目录和所有已打开的文件表项中的引用计数加1。

(5)为子进程创建进程上、下文

进程创建结束,设子进程状态为“内存中就绪”并返回子进程的标识符。

(6)子进程执行

虽然父进程与子进程程序完全相同,但每个进程都有自己的程序计数器PC(注意

子进程的PC开始位置),然后根据pid变量保存的fork( )返回值的不同,执行了不同的分支语句。

六、实验数据及结果分析

<运行结果1〉

分析:由于函数printf()输出的字符串之间不会被中断,因此,每个字符串内部的字符顺序输出时不变。但是 , 由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。

<运行结果2〉

分析:因为上述程序执行时,lockf(1,1,0)锁定标准输出设备,lockf(1,0,0)解锁标准输出设备,在lockf(1,1,0)与lockf(1,0,0)中间的for循环输出不会被中断,加锁与不加锁效果不相同。

<运行结果3〉

分析:程序在调用fork( )建立一个子进程后,马上调用wait( ),使父进程在子进程结束之前,一直处于睡眠状态。子进程用exec( )装入命令ls ,exec( )后,子进程的代码被ls的代码取代,这时子进程的PC指向ls的第1条语句,开始执行ls的命令代码。

七、实验总结

经过这次上机实验的学习,我们一共做了三道题,碰到的第一问题是Linux系统并非我们通常使用的Windows系统,还未上手便已产生畏惧的心理;碰到的第二个问题,在刚开始搭建环境的时候,..后面的的并非手打而是按Tab键引出之后的代码,之后陆陆续续的一些小问题,在老师、学长耐心的帮助下相对轻松地解决了,相比在课堂上老师的讲解与课件的演示,最大的不同是我更加的直观且真实触摸到了这一学科,在实践的过程中明白了当时逻辑并不清晰的抽象问题——什么是进程,我想在实践的过程中我会更加热爱这个学科并受益匪浅。

附录源程序清单

〈程序1〉

#include

void main()

{

int p1,p2;

while((p1=fork())==-1);

if(p1==0)putchar('b'); else

{

while((p2=fork())==-1); if(p2==0)putchar('c'); else putchar('a');

}

}

<程序2〉

#include

#include main()

{

int p1,p2,i;

while((p1=fork())==-1); if(p1==0)

{

lockf(1,1,0);

for(i=0;i<50;i++)

printf("child %d/n",i); lockf(1,0,0);

}

else

{

while((p2=fork())==-1); if(p2==0)

{

lockf(1,1,0);

for(i=0;i<50;i++)

printf("son %d/n",i); lockf(1,0,0);

}

else

{

lockf(1,1,0);

for(i=0;i<50;i++)

printf("daughter %d/n",i);

lockf(1,0,0);

}

}

}

〈程序3〉

#include

#include

main( )

{

int pid;

pid=fork( ); /*创建子进程*/switch(pid)

{

case -1:/*创建失败*/

printf("fork fail!\n");

exit(1);

case 0:/*子进程*/

execl("/bin/ls","ls","-1","-color",NULL); printf("exec fail!\n");

exit(1);

default:/*父进程*/

wait(NULL);/*同步*/

printf("ls completed !\n");

exit(0);

}

}

《Linux操作系统》实验五-作业任务和进程管理

《Linux操作系统》 实验报告 实验五:作业任务和进程管理

一、实验目的 (1) 掌握UNIX系统作业、任务和进程管理的任务,了解Linux系统进程管理的图形界面; (2) 了解UNIX的系统进程间通信机制,掌握信号操作和终止进程的命令。 (3) 了解任务和作业管理命令at和batch; (4) 掌握UNIX系统的进程定时启动管理命令crontab; (5) 了解进程的挂起,掌握fg,bg等命令。 二、实验环境 一台装有Windows操作系统PC机,上装有虚拟机系统VMWare,实验过程通过VMWare系统启Linux系统工作。 三、实验内容与实验过程及分析(写出详细的实验步骤,并分析实验结果) 1)进程管理与查询 (1)进程状态查询 1.ps –ef | more #显示所有进程及启动参数 2. ps –ajx | more #以作业方式显示进行信息

3. ps –el | more #以长格式显示所有进程信息 4.pstree –p 5.pstree -a

(2)终止进程的执行 1.终止某一已知PID进程:ps –9 PID(1)#PID由用户自己选择 2.在当前终端上执行命令:man ps 3、换一终端在其运行:ps –e | grep man #确定进程PID

4.终止进程执行:kill –9 PID #PID是上命令查询的结果 4.终止所的同名进程 终止上例中的man命令:killall man或 killall –9 man 分别至少在2个不同终端上登录,然后在其中的一个终端上分别执行以下命令,并观察和分析原因。 killall bash killall –9 bash 执行killall -9 bash命令时,终端窗口关闭 (3) 进程的挂起及前后台调度 在一个终端上起动命令man man,在不退出man命令的情况下按下组合键Ctrl+Z,观察反映。 答:先退出当前页面,返回进入终端时的页面 先后执行命令jobs和fg命令,并观察反映。

实验二 Tutorial 2 Linux 基本命令操作2

Tutorial 2 Linux 基本命令操作2 1 实验简介 虽然目前linux 图像界面的使用已相当的方便,但是有些操作还是在字符界面下使用比较灵活。除此之外,使用字符界面登陆linux 系统,系统资源的消耗也比较少,从而可以提高系统性能。 本次实验内容主要包括:linxu 下文件和目录操作命令的使用方法。 2 实验目的 (1)掌握远程登录Linux 系统的软件putty 的基本用法。 (2)掌握文件和目录的区别 (3)熟悉文件和目录的相关操作:建立、复制、移动、删除、重命名、查找、统计等 (4)掌握输入、输出重定向的用法 (5)掌握find 的常见查找模式 (6)理解文件的类型及查看 3 实验准备 (1)了解远程登录的概念,以及远程登录软件putty。 (2)了解linux 命令行的基本概念,掌握通配符的使用方法。 (3)了解绝对路径和相对路径的概念及表达方法。 4 远程登录软件putty的基本用法实验步骤 基本做法同实验1. 5 Linux 文件和目录操作命令 说明:在下面的文档中的$为系统提示符。 (1) 使用cd 和pwd 命令,掌握相对路径和绝对路径。 对照右图,假如从目录user3 开始,键完以下命令后,你的位置会在哪里。 请将结果填在横线上。 $pwd /home/user3 $cd .. $pwd $cd.. $cd usr $pwd $cd /usr $pwd $cd.. /tmp $pwd $cd.

$pwd (2)检查当前的子目录pwd。 $ pwd (3) 在你的注册目录下创建(mkdir)子目录:dir1、dir2。 $ mkdir dir1 dir2 (4) 在你的主目录中创建一个叫junk 的目录。将这个目录变为工作目录,应当使用什么命令?这个新目录的绝对路径名是什么? (5) 在主目录创建以下目录,要求只能用一个命令行: junk/dira/dirl junk/dira junk/dira/dir2 junk/dira/dirl/dirc 你碰到什么问题了吗?如果碰到问题,在重试之前,将刚才创建的所有目录删除,这个删除应该使用哪一个命令?mkdir –p junk/dira/dir1/dirc junk/dira/dir2 (-p创建父目录) (6) 在主目录仅使用rmdir 命令,删除在junk 目录下的所有子目录。仅用一个rmdir 命令如何实现这一操作? rmdir {junk/dira/dir2,junk/dira/dir1/dirc,junk/dira/dir1,junk/dira} (7) 使用“touch 文件名”方法在你的注册目录下建立文件file1 和file2 $touch file1 file2 (8) 将file1 file2 复制到dir1 中,并察看注册目录与dir1 目录下有何变化? $ cp file1 file2 dir1 (9) 将文件file1,file2 从注册目录移动至dir2 中,再察看注册目录与dir2目录有何变化? $mv file1 file2 dir2 (10) 将dir2 中的文件file1 改名为myfile1 $ mv /dir2/file1 /dir2/myfile1 (11) 请使用绝对路径删除文件myfile1 $ rm /root/dir2/myfile1 (12)分屏显示/bin 目录下文件的详细信息。 $cd /bin $list –l | more (13)回到根目录,利用cp 命令复制系统文件/etc/profile 到当前目录下。 $ cd ~ $ cp /etc/profile . (14)复制文件profile 到一个新文件profile.bak,作为备份。 (15)用less 命令分屏查看文件profile 的内容,注意练习less 命令的各个子命令,如b、空格键、q 、/字符串(查找)等,并对then 关键字查找。 (16)用grep 命令在profile 文件中对关键字then 进行查询。 (17) 在家目录下创建目录test,并复制/etc 目录下的最后四个字符为.ini的文件到test 目录下。 (18)使用gzip 命令对test 下的文件进行压缩。 (19)使用tar 命令对test 下的文件打包。 (20)把用tar 命令打包的文件解包,并用gzip 命令对文件进行解压缩。 (21)利用tar 命令把test 中的文件压缩打包。 (22) 在/var/lib 目录下查找所有文件其所有者是games 用户的文件。

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

Linux 进程管理实验

Linux 进程管理实验 一、实验内容: 1. 利用bochs观测linux0.11下的PCB进程控制结构。 2. 利用bochs观测linux0.11下的fork.c源代码文件,简单分析其中的重要函数。 3. 在fork.c适当位置添加代码,以验证fork函数的工作原理。 二、Linux进程管理机制分析 Linux有两类进程:一类是普通用户进程,一类是系统进程,它既可以在用户空间运行,又可以通过系统调用进入内核空间,并在内核空间运行;另一类叫做内核进程,这种进程只能在内核空间运行。在以i386为平台的Linux系统中,进程由进程控制块,系统堆栈,用户堆栈,程序代码及数据段组成。Linux系统中的每一个用户进程有两个堆栈:一个叫做用户堆栈,它是进程运行在用户空间时使用的堆栈;另一个叫做系统堆栈,它是用户进程运行在系统空间时使用的堆栈。 1.Linux进程的状态: Linux进程用进程控制块的state域记录了进程的当前状态,一个Linux 进程在它的生存期中,可以有下面6种状态。 1.就绪状态(TASK_RUNNING):在此状态下,进程已挂入就绪队列,进入准备运行状态。 2.运行状态(TASK_RUNNING):当进程正在运行时,它的state域中的值不改变。但是Linux会用一个专门指针(current)指向当前运行的

任务。 3.可中断等待状态(TASK_INTERRUPTIBLE):进程由于未获得它所申请的资源而处在等待状态。不管是资源有效或者中断唤醒信号都能使等待的进程脱离等待而进入就绪状态。即”浅睡眠状态”。 4.不可中断等待状态(TASK_UNINTERRUPTIBLE):这个等待状态与上面等待状态的区别在于只有当它申请的资源有效时才能被唤醒,而其它信号不能。即“深睡眠状态”。 5.停止状态(TASK_STOPPED):当进程收到一个SIGSTOP信号后就由运行状态进入停止状态,当收到一个SINCONT信号时,又会恢复运行状态。挂起状态。 6.终止状态(TASK_ZOMBIE):进程因某种原因终止运行,但进程控制块尚未注销。即“僵死状态”。 状态图如下所示: 2.Linux进程控制块:

实验二 Linux常用命令的使用(一)

实验二 Linux 常用命令的使用(一) 一、实验目的 1. 掌握Linux 系统开机启动和退出的方法 2. 掌握Linux 系统中获取命令帮助的方法 3. 掌握Linux 系统命令格式 4. 掌握Linux 系统中常用命令的作用和命令中各选项的作用 二、实验环境 安装了Red Hat Linux9.0/Fedora 系统的计算机一台 三、实验内容及步骤 (一)Linux 操作系统的登录和退出 【操作任务1】登录Linux 操作系统 【操作步骤】 (1)在开始---程序---Vmware 菜单中启动虚拟机,在打开的虚拟机界面中选择要启动的操作系统选项卡,点击启动图标。如下图所示。 (2)等待一段时间后,将出现登陆对话框,选择其中一个用户,输入用户名和密码后,即可登陆Linux 操作系统。如下图所示。(如果要登陆root 用户,请选择‖其他…‖,然后输入用户名:root 和相应的密码,点击“登陆”按钮)

输入用户名 root

(3)点击登陆按钮后,即可成功登陆。如下图。(注意,如果以root 超级管理员用户身份登陆,系统会弹出对话框询问,如上图所示,点击“继续”按钮即可) 【操作任务2】退出Linux 操作系统 【操作步骤】 (1)在顶部面板上依次单击―系统→关机‖命令,如下图 (2)在打开的对话框,选择―关机‖或―重新启动‖选项,然后点击―确定‖按钮,即可完成关机或重新启动操作。 如果使用超级管理员root 用户身份登陆,操作系统 会询问“是否真的要以特权用户身份登陆”,这里点击继续按钮,即可以root 身份登陆

【操作任务3】图形界面和字符界面的切换 【操作步骤】 (1)开机使用root用户进入图形界面,请打根目录下的etc文件夹,找到inittab文件, (文件路径:/etc/inittab),双击打开之。 (2)找到该文件中的“id:5:initdefault:”这一行,将该行中的“id:5:initdefault:”行的“5” 修改为“3”,然后按Ctrl+S保存。

实验三-进程管理

实验三进程管理 一、实验目的 1.熟悉和理解进程和进程树的概念,掌握有关进程的管理机制 2.通过进程的创建、撤销和运行加深对进程并发执行的理解 3.明确进程与程序、并行与串行执行的区别 4.掌握用C 程序实现进程控制的方法 二、实验学时 2学时 三、实验背景知识 所涉及的系统调用 1、exec( )系列(exec替换进程映像) 系统调用exec( )系列,也可用于新程序的运行。fork( )只是将父进程的用户级上下文拷贝到新进程中,而exec( )系列可以将一个可执行的二进制文件覆盖在新进程的用户级上下文的存储空间上,以更改新进程的用户级上下文。exec( )系列中的系统调用都完成相同的功能,它们把一个新程序装入内存,来改变调用进程的执行代码,从而形成新进程。如果exec( )调用成功,调用进程将被覆盖,然后从新程序的入口开始执行,这样就产生了一个新进程,新进程的进程标识符id 与调用进程相同。 exec( )没有建立一个与调用进程并发的子进程,而是用新进程取代了原来进程。所以exec( )调用成功后,没有任何数据返回,这与fork( )不同。exec( )系列系统调用在UNIX系统库unistd.h中,共有execl、execlp、execle、execv、execvp五个,其基本功能相同,只是以不同的方式来给出参数。 #include int execl(const cha r *pathname, const char *arg, …); int execlp(const char *, const char *arg, …); int execle(const char *pathname, const char *arg, …, const char *envp[ ]); int execv(const char *pathname, char *const argv[ ]); int execvp(const char *, char *const argv[ ]); 参数: path参数表示你要启动程序的名称包括路径名。 arg参数表示启动程序所带的参数,一般第一个参数为要执行命令名,不是带路径且arg必须以NULL结束。 返回值:成功返回0,失败返回-1 注:上述exec系列函数底层都是通过execve系统调用实现. 1)带l 的exec函数:execl,execlp,execle,表示后边的参数以可变参数的形式给出且都以一个空指针结束。 #include

linux进程管理篇

目录:(内容较多,加个目录) |-进程管理 进程常用命令 |- w查看当前系统信息 |- ps进程查看命令 |- kill终止进程 |- 一个存放内存中的特殊目录/proc |- 进程的优先级 |- 进程的挂起与恢复 |- 通过top命令查看进程 计划任务 |- 计划任务的重要性 |- 一次性计划at和batch |- 周期性计划crontab 进程管理的概念 进程和程序区别 1.程序是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的。 2.程序和进程无一一对应关系。一个程序可以由多个时程公用;另一一方面,一个进程在活动中有可顺序地执行若干个程序 父子进程的关系 1.子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程 2.在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。 3.父进程终止子进程自然终止。 前台进程和后台进程 前台进程 在shell提示处理打入命令后,创建一个子进程,运行命令,Shell等待命令退出,然后返回到对用户给出提示符。这条命令与Shell异步运行,即在前台运行,用户在它完成之前不能执行别一个命令

很简单,我们在执行这个查找命令时,无法进行其它操作,这个查找就属于前台进程 后台进程 在Shell提示处打入命令,若后随一个&,Shell创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与Shell同步运行,即在后台运行。“后台进程必须是非交互式的” 再来看这个命令就变成了后台进程,我们用同样的条件进行查找,把查找记过放到hzh/test/init.find这个文件中。不影响我们前台其它的操作。 进程的状态

Linux常用命令实验报告

实验二 姓名:陈辉龙学号:201407010201 班级:14计科(1)一.实验目的: ?掌握Linux常见命令,为今后的实验打下良好的基础。 二.实验内容 1.新建用户为chenhuilong,配置密码为passwd: 2.切换到chenhuilong用户,并在/home/chenhuilong目录下新建文件夹dir: 3.在文件夹dir下新建文件hello(内容为"printf hello world!"),并将其拷贝至/home/user目录: 4.统计/home/user目录下文件的个数,包括子目录里的首字符为-的普通文件:

5.统计/home下目录的个数,包括子目录里的目录: 6.显示/home/user目录下名为hello的文件的行数、字数以及字符数(使用输入重定向): 7.将上步的结果输出重定向到名为cnt_hello的文件: 8.删除/home/user目录下的hello文件: 9.进入/home/user/dir文件夹,将hello文件属性变为-rwxrw-r--(使用符号标记方式),并为hello文件在/home/user目录下建立软链接,链接文件名为link_hello:

10.查看/home/user/dir/hello文件的详细信息: 11.切换至根目录下查找hello文件: 12.打包home/user/dir/hello文件,并进行压缩,然后再进行解压缩解包: 13.退出user用户,删除/home/user文件夹:

14.将文件夹/home的所有者改为user用户,并删除user用户: 三.实验总结: 本实验旨在熟悉Unix的常用命令,实验较简单,操作起来还算顺利,做了一遍感觉还不是很熟悉,因此做了两遍,第二遍就很得心顺手。通过这次实验,熟悉了一些常用的命令操作,为以后的学习打下坚实的基础,提高自己的动手能力。

实验五 Linux进程管理

实验五Linux进程管理一.实验目的: 进行系统进程管理。 二.实验内容: 1.进程状态查看; 2.控制系统中运行的进程; 3.安排一次性和周期性自动执行的后台进程; 三.实验练习: 任务一进程管理 实验内容: 查看系统中的进程;控制系统中的进程;安排计划任务。实验步骤: 1.使用ps命令查看和控制进程 ●显示本用户的进程: ●显示所有用户的进程:。 ●在后台运行cat命令: ●查看进程cat : ●杀死进程cat:。 ●再次查看查看进程cat,看看是否被杀死。 2.使用top命令查看和控制进程 ●用top命令动态显示当前的进程。 ●只显示用户user01的进程(利用u键)。 ●利用k键,杀死指定进程号的进程。 3.挂起和恢复进程 ●执行命令cat。

●按Ctrl+z键,挂起进程cat。 ●输入jobs命令,查看作业。 ●输入bg,把cat切换到后台执行。 ●输入fg,把cat切换到前台执行。 ●按Ctrl+c键,结束进程cat。 4. 熟悉并使用at命令 5.安排计划任务 某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案: (1)在下午4 :50删除/abc目录下的全部子目录和全部文件; (2)从早8:00~下午6:00每小时读取/xyz目录下x1文件中的全部数据加入到/backup目录下的bak01.txt文件内; (3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz; (4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc); (5)在早晨8:00前开机后启动启动www服务器。 ●查看crontab命令的帮助信息: ●查看用户的计划任务列表: ●生成一个crontab的脚本文件: ●按照生成的脚本安排计划任务: ●查看计划任务表,看看计划任务是否已被安排: ●删除计划任务列表,并进行确认。

linux进程管理(一)

进程介绍 程序和进程 程序是为了完成某种任务而设计的软件,比如OpenOffice是程序。什么是进程呢?进程就是运行中的程序。 一个运行着的程序,可能有多个进程。比如自学it网所用的WWW服务器是apache服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户来同时请求httpd服务,apache服务器将会创建有多个httpd进程来对其进行服务。 进程分类 进程一般分为交互进程、批处理进程和守护进程三类。 值得一提的是守护进程总是活跃的,一般是后台运行,守护进程一般是由系统在开机时通过脚本自动激活启动或超级管理用户root来启动。比如在 Redhat中,我们可以定义httpd 服务器的启动脚本的运行级别,此文件位于/etc/init.d目录下,文件名是httpd,/etc/init.d/httpd 就是httpd服务器的守护程序,当把它的运行级别设置为3和5时,当系统启动时,它会跟着启动。 [root@localhost ~]# chkconfig --level 35 httpd on 进程的属性: 进程ID(PID):是唯一的数值,用来区分进程; 父进程和父进程的ID(PPID); 启动进程的用户ID(UID)和所归属的组(GID); 进程状态:状态分为运行R、休眠S、僵尸Z; 进程执行的优先级; 进程所连接的终端名; 进程资源占用:比如占用资源大小(内存、CPU占用量); 父进程和子进程: 他们的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止,父进程并不一定终止。比如httpd服务器运行时,我们可以杀掉其子进程,父进程并不会因为子进程的终止而终止。 在进程管理中,当我们发现占用资源过多,或无法控制的进程时,应该杀死它,以保护系统的稳定安全运行; 进程管理

Linux常用命令实验报告

实验二 姓名:陈辉龙学号:201407010201 班级:14计科(1)一.实验目的: 掌握Linux常见命令,为今后的实验打下良好的基础。 二.实验内容 1.新建用户为chenhuilong,配置密码为passwd: 2.切换到chenhuilong用户,并在/home/chenhuilong目录下新建文件夹dir: 3.在文件夹dir下新建文件hello(内容为"printf hello world!"),并将其拷贝至/home/user目录: 4.统计/home/user目录下文件的个数,包括子目录里的首字符为-的普通文件:

5.统计/home下目录的个数,包括子目录里的目录: 6.显示/home/user目录下名为hello的文件的行数、字数以及字符数(使用输入重定向): 7.将上步的结果输出重定向到名为cnt_hello的文件: 8.删除/home/user目录下的hello文件: 9.进入/home/user/dir文件夹,将hello文件属性变为-rwxrw-r--(使用符号标记方式),并为hello文件在/home/user目录下建立软链接,链接文件名为link_hello:

10.查看/home/user/dir/hello文件的详细信息: 11.切换至根目录下查找hello文件: 12.打包home/user/dir/hello文件,并进行压缩,然后再进行解压缩解包: 13.退出user用户,删除/home/user文件夹:

14.将文件夹/home的所有者改为user用户,并删除user用户: 三.实验总结: 本实验旨在熟悉Unix的常用命令,实验较简单,操作起来还算顺利,做了一遍感觉还不是很熟悉,因此做了两遍,第二遍就很得心顺手。通过这次实验,熟悉了一些常用的命令操作,为以后的学习打下坚实的基础,提高自己的动手能力。

实验一 进程管理

实验一进程管理 1. 实验目的 ⑴加深对进程概念的理解,明确进程和程序的区别; ⑵进一步认识并发执行的实质; ⑶分析进程争用资源的现象,学习解决进程互斥的方法; ⑷了解Linux系统中进程通信的基本原理。 2. 实验准备 ⑴阅读Linux的sched.h源码文件,加深对进程管理的理解。 ⑵阅读Linux的fork.h源码文件,分析进程的创建过程。 3. 实验内容 ⑴进程的创建 编写一段程序,使用系统调用fork ( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 ⑵进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 如果在程序中使用系统调用lockf ( )来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 ⑶软中断通信 编制一段程序实现进程的软中断通信。要求:使用系统调用fork ( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上发来的中断信号(既按Del键);当捕捉到中断信号后,父进程系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child process 1 is killed by parent! Child process 2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 在上面的程序中增加语句signal (SIGINT, SIG_IGN) 和signal (SIGQUIT, SIG_IGN),观察执行结果,并分析原因。 4. 实验指导

Linux进程管理-实验报告

(1) 加深对进程概念的理解,明确进程和程序的区别。 (2) 进一步认识并发执行的实质。 (3) 学习通过进程执行新的U 标程序的方法。 (4) 了解Linux 系统中进程信号处理的基本原理。 Red Hat Linux (1)进程的创建 编写一段程序,使用系统调用fork ()创建两个子进程,当此进程运 行时,在系统中有一个父进程和两个子进程活动,让每一个进程在 屏幕上显示一个字符,父进程显示字符“a” ;子进程分别显示字符 “b”和字符“c” ,试观察记录屏幕上的显示结果,并分析原因。 程序代码: # include int main() { int pl ,p2 ; while((p 1 =fork())==-1); if(pl==0) putchar(b); else { while((p2=fork())==-1); if(p2==0) putchar( c 1); else putchar( a r ); } return 0; ) 运行结果:bca 分析:第一个while 里调用fork()函数一次,返回两次。子进程P1 得到的返回值是0,父进程得到的返回值是新子进程的进程ID (正 整数);接下来父进程和子进程P1两个分支运行,判断P1二二0,子 进程P1符合条件,输出%";接下来else 里面的while 里再调用 fork()函数一次,子进程P2得到的返回值是0,父进程得到的返回值 是新子进程的进程ID (正整数);接下来判断P2=:0,子进程P2符 合条件,输出,接下来父进程输出“a” ,程序结束。 (2)进程的控制 ① 修改已编写的程序,将每个进程输出一个字符改为每个进程输出 一 《Linux 实验目的: 实验环境: 实验内容: 操作系统设计实践》实验一:进程管理

实验一 Linux常用命令

淮海工学院计算工程学院实验报告书 课程名:《Linux程序设计》 题目:实验一Linux常用命令 班级:D软件091、092 学号: 姓名:

实验一Linux常用命令 一、实验目的 1、熟悉VMware Workstation 虚拟机的使用; 2、熟悉Ubuntu操作系统; 3、掌握常用的Linux 命令。 二、实验设备 1、硬件:PC; 2、软件:VMware Workstation 虚拟机和Ubuntu操作系统。 三、实验预习要求 1、关于Ubuntu操作系统的安装和使用; 2、Linux 常用操作命令。 四、实验内容 1、基于虚拟机的Ubuntu操作系统的使用; 2、文件与目录相关命令的使用; 3、压缩备份命令的使用; 4、磁盘管理与维护命令的使用; 5、系统管理与设置命令的使用; 6、网络相关命令的使用。 五、实验步骤 1、基于虚拟机的Linux操作系统的使用 (1)启动Windows以后,选择“开始”—“程序”—“VMware”—“VMware Workstation”,启动VMware Workstation应用程序; (2)选择File—Open选择安装好的Linux虚拟机文件启动Linux操作系统; (3)启动系统后输入用户名和密码,进入X window界面; (4)选择“应用程序”—“附件”—“终端”,进入终端界面; (5)在终端中执行Linux 常用命令。 2、文件与目录相关命令的使用(要求在每一个操作命令后写出命令显示效果) (1)查询/bin目录,看一看有哪些常用的命令文件在该目录下: ll /bin

(2)进入/tmp目录下,新建目录myshare:cd /tmp mkdir myshare ls –ld myshare/

linux实验五_进程管理命令

实验五进程管理命令 一、实验目的 (1)了解如何监视系统运行状态 (2)掌握查看、删除进程的正确方法 (3)掌握命令在后台运行的用法 (4)掌握进程手工、调度启动的方法 二、常用命令 w h o 查看当前在线用户 t o p 监视系统状态 p s 查看进程 k i ll 向进程发信号 b g 把进程变成后台运行 &把进程变成后台运行 f g 把后台进程变成前台运行 j o bs 显示处于后台的进程。 a t 在指定的时刻执行指定的命令或命令序列 b a t c h 在系统负载较低、资源较空闲时执行命令或命令序列 以上命令的具体用法请参阅教材、课件和m an手册 三、实验内容 1、用t o p命令察看当前系统的状态,并识别各进程的有关栏目。 2、用p s命令察看系统当前的进程,并把系统当前的进程保存到文件p r oc es s中。 用p s au x>p ro c es s命令写入

3、用p s命令察看系统当前有没有in i t进程。 用p s –a ux|gr ep i n i t查看 4、输入“c at<回车>” 按-z 键,出现什么情况?输入f g命令出现什么情况? 按-z 键转入后台运行,fg把后台命令移回前台 按-c 键,出现什么情况?按-c 键终止命令 5、输入“f in d /-na me l s*>te mp&”,该命令的功能是什么? 查看该进程; 查找所有硬盘中ls开头的文件,并把文件名定向到temp中 输入ki l la ll f in d命令后,再查看该进程。 6、输入“f in d /-na me l s*>te mp&” 输入jo b s命令,出现什么情况? 查看这个shell中放在后台运行的程序或命令 输入f g命令出现什么情况? 调出后台运行的程序放到前台 7、指定上午XX(小时):X X(分钟)执行某命令 在上午10:20分执行m kd i r命令

实验一——Linux环境下的进程管理之欧阳光明创编

软件学院 欧阳光明(2021.03.07) 上机实验报告 课程名称:操作系统 实验项目:实验一:Linux环境下进程管理 实验室:耘慧402 姓名:学号: 专业班级:实验时间:

一、实验目的及要求 1.加深对进程概念的理解,明确进程和程序的区别; 2.进一步认识并发执行的实质; 3.分析进程争用资源的现象,学习解决进程互斥的方法; 4.了解Linux系统中进程通信的基本原理; 二、实验性质 1.进程的创建:编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 2.进程的控制:修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf ()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 3.用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容;利用wait( )来控制进程执行顺序。 三、实验学时 实验性质:验证性 实验学时: 4学时 实验要求:必做 四、实验环境 1.实验环境: Linux系统开发环境 2.知识准备: (1) Linux系统开发环境搭建; (2) Linux环境下GCC编译器的使用; (3)语言中函数定义与调用、指针和类型的定义与使用、结构的定义、动态

内存的申请等预备知识。 五、实验内容及步骤 ①实验内容: (1)进程的创建 编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 (2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 (3)用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容;利用wait( )来控制进程执行顺序。 ②实验步骤: 1.进程的创建 1.1 进程 UNIX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、共享存储区等。每个区又分为若干页,每个进程配置有唯一的进程控制块PCB,用于控制和管理进程。 PCB的数据结构如下: (1)进程表项(Process Table Entry)。包括一些最常用的核心数据: 进程标识符PID、用户标识符UID、进程状态、事件描述符、进程和U区在内存或外存的地址、软中断信号、计时域、进程的大小、偏置值nice、指向就绪队列中下一个PCB的指针P_Link、指向U区进程正文、数据及栈在内存区域的指针。 (2)U区(U Area)。用于存放进程表项的一些扩充信息。 每一个进程都有一个私用的U区,其中含有:进程表项指针、真正用户标识符

最新整理Linux操作系统的进程管理详解

L i n u x操作系统的进程管理详解 L i n u x操作系统中进程的管理是很重要的一部分,下面由学习啦小编为大家整理了L i n u x操作系统的进程管理详解的相关知识,希望对大家有帮助! L i n u x操作系统的进程管理详解 对于L i n u x的进程的管理,是通过进程管理工具实现的,比如p s、k i l l、p g r e p等工具; L i n u x操作系统的进程管理/1、 p s监视进程工具; p s为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用t o p工具; 1.p s的参数说明; p s提供了很多的选项参数,常用的有以下几个; l长格式输出; u按用户名和启动时间的顺序来显示进程; j用任务格式来显示进程; f用树形格式来显示进程; a显示所有用户的所有进程(包括其它用户); x显示无控制终端的进程; r显示运行中的进程;

w w避免详细参数被截断; 我们常用的选项是组合是a u x或l a x,还有参数f 的应用; p s a u x或l a x输出的解释; U S E R进程的属主; P I D进程的I D; P P I D父进程; %C P U进程占用的C P U百分比; %M E M占用内存的百分比; N I进程的N I C E值,数值大,表示较少占用C P U时间; V S Z进程虚拟大小; R S S驻留中页的数量; W C H A N T T Y终端I D S T A T进程状态 D U n i n t e r r u p t i b l e s l e e p(u s u a l l y I O) R正在运行可中在队列中可过行的; S处于休眠状态; T停止或被追踪;

Linux实验报告

Linux程序设计 实验报告 姓名:杨帆 班级:计1242 学号: 121842284 专业:计算机科学与技术指导老师:赵帼英

实验一 Linux系统安装与启动(选做实验) 一、实验目的(通过实践及查阅资料完成如下实验) 1.掌握虚拟机的配置过程。 2.掌握Linux系统的安装过程和简单配置方法。 3.掌握与Linux相关的多操作系统的安装方法。 4.掌握Linux系统的启动、关闭步骤。 5.了解Linux文件系统和目录结构。 二、实验内容 1.安装虚拟机软件(如VMware、Virtualbox)。 2.在虚拟机软件中安装Linux操作系统(如Fedora、Ubuntu、redhat等)。 3.配置Linux系统运行环境。 4.正确地启动、关闭系统。 三、实验步骤 1 .安装虚拟机软件(VMware Workstation 7.0) 。 2.在虚拟机软件中新建Linux虚拟机 2.1设置内存大小(建议大于256MB) 2.2设置虚拟硬盘大小(建议大于8GB) 2.3设置虚拟光驱(虚拟方式,镜像文件) 2.4设置网络连接模式(建议采用桥接方式) 2.5设置共享目录(建议英文目录名) 1.在Linux虚拟机中安装Linux操作系统(fedora10 )。 3.1选择安装界面 3.2检测安装截介质(建议跳过) 3.3安装过程中的语言、键盘选择 3.4磁盘分区(采用自动分区,总大小与2.2相匹配) 3.5引导程序选择(采用GRUB) 3.6注意事项(禁用SELinux) 2.通过相关命令实现对操作系统的登录、退出与关机 3.使用文件浏览器査看Linux操作系统目录结构

实验报告5Linux进程管理

实验五 Linux进程管理 四、实验过程(实验步骤、记录、数据、分析、结果)(一)进程查看、终止、挂起及暂停等操作 1、使用ps命令查看和控制进程 1)显示本用户进程 #ps 2)显示所有用户的进程 #ps–au 3)在后台运行cat命令 #cat& 4)查看进程cat #ps aux |grep cat

5)杀死进程cat #kill -9 cat 6)再次查看进程cat,看看是否被杀死。 2、使用top命令查看和控制进程 1)用top命令动态显示当前的进程。

2)只显示某一用户的进程(u) 3)杀死指定进程号的进程(k) 3、挂起和恢复进程 1)执行命令cat 2)按【ctrl+z】挂起进程 3)输入jobs命令,查看作业 4)输入bg,把cat切换到后台执行5)输入fg,把cat切换到前台执行6)按【ctrl+c】结束进程

(二)通过at命令实现计划任务 1、5分钟后执行/bin/date #at now+5minutes at>/bin/date at>(提示:输入【ctrl+d】 job任务号at 年-月-日小时:分钟 如何查看结果? 使用atq可以查询到已添加的at计划任务 2、查找系统中任何以c为后缀名的文档,将结果保存到$HOME/findc文件中,指定时间为2016年12月01日早上8点 #at 8am 12/01/16 at>find / -name ‘*.c’>$HOME/findc at> job任务号at 年-月-日小时:分钟 如何查看结果? 使用atq可以查询到已添加的at计划任务 3、2题的命令写到$HOME/findjob中,使用at命令执行,并将结果保存到 $HOME/findfc文件中,指定时间为当前时间后5分钟 #vi $HOME/findjob 内容如下: find / -name ‘*.c’>$HOME/findfc 存盘退出

相关文档
最新文档