linux进程线程管理实验报告
进程管理实验实验报告
![进程管理实验实验报告](https://img.taocdn.com/s3/m/aafbe505bf23482fb4daa58da0116c175f0e1ed3.png)
一、实验目的1. 理解进程的基本概念,掌握进程的结构和生命周期。
2. 掌握进程的创建、终止、同步和通信的方法。
3. 熟悉进程调度算法和进程同步机制。
4. 通过实验加深对操作系统进程管理的理解。
二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 实验工具:gcc、make、xterm三、实验内容1. 进程的创建与终止(1)使用fork()系统调用创建进程编写一个C程序,通过fork()系统调用创建一个子进程。
父进程和子进程分别执行不同的任务,并输出各自的信息。
```c#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main() {pid_t pid;pid = fork();if (pid == -1) {printf("Fork failed!\n");return 1;printf("This is child process, PID: %d\n", getpid()); // 子进程执行的任务} else {printf("This is parent process, PID: %d\n", getpid()); // 父进程执行的任务}return 0;}```(2)使用exec()系统调用替换子进程内容在父进程中,使用exec()系统调用替换子进程的内容,执行新的程序。
```c#include <stdio.h>#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>int main() {pid_t pid;pid = fork();if (pid == -1) {printf("Fork failed!\n");return 1;execlp("ls", "ls", "-l", (char )NULL);printf("Exec failed!\n");return 1;} else {wait(NULL);}return 0;}```2. 进程同步与通信(1)使用管道实现进程通信编写一个C程序,使用管道实现父进程和子进程之间的通信。
linux进程与线程通讯实验报告
![linux进程与线程通讯实验报告](https://img.taocdn.com/s3/m/86507718d1f34693dbef3e74.png)
linux 进程与线程通讯实验报告操作系统实验一进程与线程—Linux 进程与线程通讯实验报告操作系统课程设计任务书篇二: 操作系统实验Linux 进程与线程通讯Linux 进程与线程通讯报告人:设计目的1、深刻理解线程和进程的概念2、掌握线程与进程在组成成分上的差别以及与其相适应的通讯方式和应用目标。
设计的内容1、以Linux 系统进程和线程机制为背景,掌握fork() 和clone() 系统调用的2、形式和功能以及与其相适应的高级通讯方式。
由fork 派生的子进程之间通过pipe 通讯,由clone 创建的线程之间通过共享内存通讯,对于后者需要考虑互斥问题。
3、以生产者-消费者问题为例,通过实验理解fork() 和clone() 两个系统调的区别。
程序要求能够创建4 个进程或线程,其中包括两个生产者和两个消费者,生产者和消费者之间能够传递数据。
4、设计准备1、fork 系统调用、pid=fork()创建一个子进程,子进程是父进程的完整复制,正常返回值为非负整数,对于 父进程来说该数大于 0,是子进程的编号 (pid); 对于子进程来说该数为 0。
正是利用反回值的差别可以决定二者不同的后继动作。
2、 clone 系统调用int clone(int (*fn)(void * arg), void *stack, int flags, void * arg);其中 fn 是轻进程所执行的函数, stack 是轻进程所使用的栈, flag 是CLONE_VM, CLONE_FS, CLONE_FILES,LONE_SIGHAND,CLONE_的组合,arg 是调用过程的对应参数。
Clone()的关键是flag 的设定,CLONE_V S 示子进程共享父进程内存,CLONE_F 表示子进程共3、 pipe 系统调用et_val=pipe(fd);参数定义为 int fd[2] 。
创建一个管道文件,返回两个文件描述符 fd[0] 和fd[1] 分别用于管道文件的读和写操作。
linux进程管理的实验报告
![linux进程管理的实验报告](https://img.taocdn.com/s3/m/13c0026f7275a417866fb84ae45c3b3566ecdd68.png)
实验报告:Linux进程管理1. 引言本实验报告将详细介绍Linux系统中进程管理的相关知识和操作。
进程管理是操作系统中的一个重要组成部分,它负责控制和调度系统中运行的各个进程,确保系统资源的合理分配和进程的正常运行。
在本实验中,我们将通过一系列步骤来了解Linux系统中进程的创建、监控和控制。
2. 实验环境为了完成本实验,我们需要在一台运行Linux操作系统的计算机上进行操作。
本实验报告基于Ubuntu 20.04 LTS操作系统进行撰写,但是适用于大多数Linux 发行版。
3. 实验步骤步骤一:创建新进程在Linux系统中,可以通过fork()系统调用来创建新的进程。
以下是一个简单的示例代码:#include <stdio.h>#include <unistd.h>int main() {pid_t pid = fork();if (pid == 0) {// 子进程逻辑printf("这是子进程\n");} else if (pid > 0) {// 父进程逻辑printf("这是父进程\n");} else {// 进程创建失败printf("进程创建失败\n");}return0;}步骤二:查看进程信息Linux系统提供了多种命令来查看系统中运行的进程信息。
以下是一些常用的命令:•ps:显示当前终端下的进程列表。
•top:实时显示进程的CPU、内存等资源占用情况。
•pstree:以树状结构显示进程的层次关系。
步骤三:杀死进程有时候我们需要终止一个运行中的进程,可以使用kill命令来发送终止信号给目标进程。
以下是一个示例:kill <PID>请将<PID>替换为目标进程的进程ID。
步骤四:进程优先级调整通过调整进程的优先级,可以影响进程在系统中的调度顺序。
在Linux系统中,可以使用nice命令来调整进程的优先级。
Linux进程管理-实验报告
![Linux进程管理-实验报告](https://img.taocdn.com/s3/m/fe2f45e3c281e53a5902ff78.png)
《Linux 操作系统设计实践》实验一:进程管理实验目的:(1) 加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质.(3) 学习通过进程执行新的目标程序的方法。
(4) 了解Linux 系统中进程信号处理的基本原理.实验环境:Red Hat Linux实验内容:(1)进程的创建编写一段程序,使用系统调用fork()创建两个子进程,当此进程运行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏幕上显示一个字符,父进程显示字符“a";子进程分别显示字符“b”和字符“c”,试观察记录屏幕上的显示结果,并分析原因.程序代码:#include<stdio。
h〉int main(){int p1 ,p2 ;while((p1=fork())==-1);if(p1==0)putchar(’b');else{while((p2=fork())==—1);if(p2==0)putchar(’c');elseputchar(’a');}return 0;}运行结果:bca分析:第一个while里调用fork()函数一次,返回两次。
子进程P1得到的返回值是0,父进程得到的返回值是新子进程的进程ID(正整数);接下来父进程和子进程P1两个分支运行,判断P1==0,子进程P1符合条件,输出“b”;接下来else里面的while里再调用fork()函数一次,子进程P2得到的返回值是0,父进程得到的返回值是新子进程的进程ID(正整数);接下来判断P2==0,子进程P2符合条件,输出“c”,接下来父进程输出“a”,程序结束。
(2)进程的控制①修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。
程序代码:#include〈stdio。
h>int main(){int p1,p2;while((p1=fork())==-1);if(p1==0)printf("Child1 is running!\n”);else{while((p2=fork())==—1);if(p2==0)printf(”Child2 is running!\n”);elseprintf(”Fath er is running!\n”);}return 0;}运行结果:Child1 is running!Child2 is running!Father is running!分析:本实验和上一个实验一样,只是将每个进程输出一个字符改为每个进程输出一句话.第一个while里调用fork()函数一次,返回两次。
进程管理实验报告_共10篇 .doc
![进程管理实验报告_共10篇 .doc](https://img.taocdn.com/s3/m/e3067e2951e79b8969022624.png)
★进程管理实验报告_共10篇范文一:_进程管理实验报告进程管理实验报告一、进程与线程1.实验目的:1.通过本实验学习Linux中创建进程的方法。
2.学习系统调用fork的使用方法。
3.学习系统调用exec族调用的使用方法。
2.实验准备1.进程的创建创建一个进程的系统调用很简单,只要调用fork函数就可以了。
#includepid_tfork();当一个进程调用了fork以后,系统会创建一个子进程,这个子进程和父进程是不同的地方只有它的进程ID和父进程ID,其他的都一样,就像父进程克隆(clone)自己一样,当然创建两个一模一样的进程是没有意义的,为了区分父进程和子进程,我们必须跟踪fork调用返回值。
当fork调用失败的时候(内存不足或者是用户的最大进程数已到)fork返回—1,否则fork的返回值有重要的作用。
对于父进程fork返回子进程ID,而对于fork 子进程返回0,我们就是根据这个返回值来区分父子进程的。
2.关于fork的说明使用该函数时,该函数被调用一次,但返回两次,两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID。
将子进程ID返回给父进程的理由是:因为一个进程的子进程可以多于一个,所以没有一个函数可以是一个子进程获得其所有子进程的进程ID。
而fork函数使子进程得到的返回值是0的理由是:一个子进程只会有一个父进程,所以子进程总是可以调用函数getpid获得其父进程的进程ID。
3.系统调用exec族调用的说明父进程创建子进程后,子进程一般要执行不同的程序。
为了调用系统程序,我们可以使用系统调用exec族调用。
Exec族调用有以下五个函数:intexecl(constchar*path,constchar*arg,?);intexeclp(constchar*file,constchar*arg,?);intexecle(constchar*path,constchar*arg,?);intexecv(constchar*path,constchar*argv[]);intexecvp(constchar*file,constchar*argv[]);exec族调用可以执行给定程序。
进程管理实验报告分析(3篇)
![进程管理实验报告分析(3篇)](https://img.taocdn.com/s3/m/664779aca0c7aa00b52acfc789eb172ded6399ca.png)
第1篇一、实验背景进程管理是操作系统中的一个重要组成部分,它负责管理计算机系统中所有进程的创建、调度、同步、通信和终止等操作。
为了加深对进程管理的理解,我们进行了一系列实验,以下是对实验的分析和总结。
二、实验目的1. 加深对进程概念的理解,明确进程和程序的区别。
2. 进一步认识并发执行的实质。
3. 分析进程争用资源的现象,学习解决进程互斥的方法。
4. 了解Linux系统中进程通信的基本原理。
三、实验内容1. 使用系统调用fork()创建两个子进程,父进程和子进程分别显示不同的字符。
2. 修改程序,使每个进程循环显示一句话。
3. 使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号,实现进程的终止。
4. 分析利用软中断通信实现进程同步的机理。
四、实验结果与分析1. 实验一:父进程和子进程分别显示不同的字符在实验一中,我们使用fork()创建了一个父进程和两个子进程。
在父进程中,我们打印了字符'a',而在两个子进程中,我们分别打印了字符'b'和字符'c'。
实验结果显示,父进程和子进程的打印顺序是不确定的,这是因为进程的并发执行。
2. 实验二:每个进程循环显示一句话在实验二中,我们修改了程序,使每个进程循环显示一句话。
实验结果显示,父进程和子进程的打印顺序仍然是随机的。
这是因为并发执行的进程可能会同时占用CPU,导致打印顺序的不确定性。
3. 实验三:使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号在实验三中,我们使用signal()捕捉键盘中断信号(按c键),然后通过kill()向两个子进程发送信号,实现进程的终止。
实验结果显示,当按下c键时,两个子进程被终止,而父进程继续执行。
这表明signal()和kill()在进程控制方面具有重要作用。
4. 实验四:分析利用软中断通信实现进程同步的机理在实验四中,我们分析了利用软中断通信实现进程同步的机理。
Linux系统进程控制操作系统实验报告4
![Linux系统进程控制操作系统实验报告4](https://img.taocdn.com/s3/m/0a9df64ea8956bec0975e374.png)
实验课程名称:操作系统
实验项目名称Linux系统进程控制实验成绩
实验者专业班级组别
同组者实验日期年月日第一部分:实验分析与设计(可加页)
实验内容描述(问题域描述)
要求:掌握Linux系统中进程控制原语fork( )、sleep( )、wait( )、exit( )、exec的使用方法。
内容:在Linux系统中编写C程序,创建一个子进程。
父进程和子进程交替运行。
父进程先显示一次“Current time:”, 然后子进程每隔一秒显示一次当前系统日期和时间,共显示三次。
以上过程共循环进行五次。
特点:本实验要求学生综合运用的知识点为
(1)由“计算机组成原理”课程中冯·诺依曼经典结构出发理解“进程”的概念。
(2)用“高级语言程序设计”课程中学到的C语言判断分支算法理解父、子进程的调度。
(3)从“汇编语言”所表示的机器语言的角度理解原语的硬件实现,继而正确使用原语。
(4)用“数据结构”课程中学到的数据结构方法来合理组织变量和实现算法。
(5)用“操作系统”中“管态”“目态”的概念来理解和运用系统调用。
三、主要实验工具、仪器设备及耗材
安装Linux系统的计算机一台。
第二部分:实验结果分析(可加页)
1、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
2、实验结果描述
3、实验小结、建议及体会
通过这次实验,使我更加的了解了,进程的三个活动状态,即运行状态、就绪状态、等待状态。
linux的进程管理实验总结
![linux的进程管理实验总结](https://img.taocdn.com/s3/m/9d5f700b777f5acfa1c7aa00b52acfc789eb9fde.png)
linux的进程管理实验总结Linux的进程管理实验总结1. 引言Linux中的进程管理是操作系统的核心功能之一,在实际的系统运行中起着重要的作用。
进程管理能够有效地分配系统资源、管理进程的运行状态和优先级,以及监控进程的行为。
本文将以Linux的进程管理实验为主题,分步骤介绍实验过程及总结。
2. 实验目的本次实验的目的是理解Linux中进程的概念,掌握进程的创建、运行和终止的基本操作,以及进程的状态转换过程。
3. 实验环境本次实验使用的是Linux操作系统,可以选择使用虚拟机安装Linux或者使用Linux主机进行实验。
4. 实验步骤4.1 进程的创建在Linux中,可以使用系统调用fork()来创建一个新的子进程。
在实验中,可以编写一个简单的C程序来调用fork()系统调用,实现进程的创建。
具体步骤如下:(1)创建一个新的C程序文件,例如"process_create.c"。
(2)在C程序文件中,包含必要的头文件,如<stdio.h>和<unistd.h>。
(3)在C程序文件中,编写main()函数,调用fork()函数进行进程的创建。
(4)编译并运行该C程序文件,观察控制台输出结果。
实验中,可以通过观察控制台输出结果,判断新的子进程是否被成功创建。
4.2 进程的运行在Linux中,通过调用系统调用exec()可以用一个新的程序替换当前进程的执行。
可以使用exec()函数来实现进程的运行。
具体步骤如下:(1)创建一个新的C程序文件,例如"process_run.c"。
(2)在C程序文件中,包含必要的头文件和函数声明,如<stdio.h>和<unistd.h>。
(3)在C程序文件中,编写main()函数,调用execl()函数来执行一个可执行程序。
(4)编译并运行该C程序文件,观察控制台输出结果。
实验中,可以通过观察控制台输出结果,判断新的程序是否被成功执行。
实验报告5Linux进程管理
![实验报告5Linux进程管理](https://img.taocdn.com/s3/m/09d30b1d7dd184254b35eefdc8d376eeaeaa1786.png)
实验报告5Linux进程管理实验五 Linux进程管理四、实验过程(实验步骤、记录、数据、分析、结果)(⼀)进程查看、终⽌、挂起及暂停等操作1、使⽤ps命令查看和控制进程1)显⽰本⽤户进程#ps2)显⽰所有⽤户的进程#ps–au3)在后台运⾏cat命令#cat&4)查看进程cat#ps aux |grep cat5)杀死进程cat#kill -9 cat6)再次查看进程cat,看看是否被杀死。
2、使⽤top命令查看和控制进程1)⽤top命令动态显⽰当前的进程。
2)只显⽰某⼀⽤户的进程(u)3)杀死指定进程号的进程(k)3、挂起和恢复进程1)执⾏命令cat2)按【ctrl+z】挂起进程3)输⼊jobs命令,查看作业4)输⼊bg,把cat切换到后台执⾏5)输⼊fg,把cat切换到前台执⾏6)按【ctrl+c】结束进程(⼆)通过at命令实现计划任务1、5分钟后执⾏/bin/date#at now+5minutesat>/bin/dateat>(提⽰:输⼊【ctrl+d】job任务号at 年-⽉-⽇⼩时:分钟如何查看结果?使⽤atq可以查询到已添加的at计划任务2、查找系统中任何以c为后缀名的⽂档,将结果保存到$HOME/findc⽂件中,指定时间为2016年12⽉01⽇早上8点#at 8am 12/01/16at>find / -name ‘*.c’>$HOME/findcat>job任务号at 年-⽉-⽇⼩时:分钟如何查看结果?使⽤atq可以查询到已添加的at计划任务3、2题的命令写到$HOME/findjob中,使⽤at命令执⾏,并将结果保存到$HOME/findfc⽂件中,指定时间为当前时间后5分钟#vi $HOME/findjob内容如下:find / -name ‘*.c’>$HOME/findfc存盘退出#at –f $HOME/findjob now+5minutes4、at命令实现在3天后统计/etc/inittab⽂件的⾏数,将统计结果发送⾄$HOME/initline⽂件中#at now+3daysat>wc–l /etc/inittab>>$HOME/initlineat>5.列出现有的所有at任务,并记下相关信息6、删除某at任务,并进⾏查看是否删除(三)通过cron命令实现计划任务1、使⽤cron命令实现12⽉每天下午2点系统进⾏维护状态,重新启动系统#vi $HOME/shutcron输⼊内容:00 14 * 12 * /sbin/shutdown–r存盘退出#crontab $HOME/shutcron2、使⽤cron命令实现在12⽉1号星期四的17点30分查看/etc/passwd内容,并将查看结果送⾄$HOME/passtext #vi $HOME/checkcron输⼊内容:30 17 1 12 4 more /etc/passwd>$HOME/passtext存盘退出#crontab $HOME/checkcron3、查看当前的crontab⽂件#crontab -l4、⽤户user的crontab⽂件#crontab –u user –r。
linux进程线程管理实验报告
![linux进程线程管理实验报告](https://img.taocdn.com/s3/m/bc38f82e59eef8c75fbfb38b.png)
linux进程线程管理实验报告————————————————————————————————作者:————————————————————————————————日期:西安郵電學院操作系统LINUX实验报告题目1:进程______题目2:线程管理__题目3:互斥_____系部名称:计算机学院专业名称:软件工程班级:0802学号:04085048学生姓名:郭爽乐时间:2010-10-31实验一: 进程管理一.实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。
二.实验要求2.1 实验环境要求1. 硬件(1) 主机:Pentium III 以上;(2) 内存:128MB 以上;(3) 显示器:VGA 或更高;(4) 硬盘空间:至少100MB 以上剩余空间。
2. 软件Linux 操作系统,内核2.4.26 以上,预装有X-Window 、vi、gcc、gdb 和任意web 浏览器。
2.2 实验前的准备工作学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参考资料,学会fork 与kill 的用法。
复习C 语言的相关内容。
三、实验内容3.1 补充POSIX 下进程控制的残缺版实验程序3.2回答下列问题:1. 你最初认为运行结果会怎么样?2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。
3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?4. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?5. 使用kill 命令可以在进程的外部杀死进程。
进程怎样能主动退出?这两种退出方式哪种更好一些?四、实验结果4.1 补充完全的源程序#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<signal.h>#include<ctype.h>#define MAX_CHILD_NUMBER 10/* 允许建立的子进程个数最大值 */ #define SLEEP_INTERV AL 1/* 子进程睡眠时间 */int proc_number=0; /* 子进程的编号,从0开始 */void do_something();main(int argc,char *argv[]){int child_proc_number=MAX_CHILD_NUMBER; /* 子进程个数 */ int i,ch;pid_t child_pid;pid_t pid[10]={0};/* 存放每个子进程的id */if(argc>1){child_proc_number=atoi(argv[1]);child_proc_number=(child_proc_number>10)?10:child_proc_number; /* 命令行参数中的第一个参数表示建立几个子进程,最多10个 */ }/*建立child_proc_number个子进程* 子进程要执行* proc_number = i;* do_something();* 父进程把子进程的id保存到pid[i] */for(i=0;i<child_proc_number;i++){child_pid=fork();if(child_pid== -1){perror("creat error!\n");return 1;}else if(child_pid>0)pid[i]=child_pid;else{proc_number=i;do_something();}}/* 让用户选择杀死哪个进程。
进程的管理实验报告
![进程的管理实验报告](https://img.taocdn.com/s3/m/d053a514e55c3b3567ec102de2bd960590c6d9cb.png)
一、实验目的1. 理解进程的基本概念和进程状态转换过程。
2. 掌握进程创建、进程同步和进程通信的方法。
3. 了解进程调度算法的基本原理和实现方法。
4. 通过实验加深对进程管理的理解,提高操作系统实践能力。
二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 开发工具:GCC三、实验内容1. 进程创建与状态转换(1)使用fork()函数创建一个子进程,并观察父进程和子进程的进程ID。
(2)使用exec()函数替换子进程的映像,实现进程的创建。
(3)观察进程状态转换过程,如创建、运行、阻塞、就绪、终止等。
2. 进程同步(1)使用互斥锁(mutex)实现进程的互斥访问共享资源。
(2)使用信号量(semaphore)实现进程的同步,如生产者-消费者问题。
(3)观察进程同步的效果,确保进程安全执行。
3. 进程通信(1)使用管道(pipe)实现进程间的单向通信。
(2)使用消息队列(message queue)实现进程间的双向通信。
(3)使用共享内存(shared memory)实现进程间的快速通信。
(4)观察进程通信的效果,确保数据正确传递。
(1)实现基于优先级的进程调度算法,如先来先服务(FCFS)和最高优先级优先(HPF)。
(2)实现基于时间片的轮转调度算法(RR)。
(3)观察进程调度算法的效果,分析不同算法的优缺点。
四、实验步骤1. 编写程序实现进程创建与状态转换,使用fork()和exec()函数。
2. 编写程序实现进程同步,使用互斥锁和信号量。
3. 编写程序实现进程通信,使用管道、消息队列和共享内存。
4. 编写程序实现进程调度,使用优先级调度和时间片轮转调度。
5. 编译并运行程序,观察实验结果,分析实验现象。
五、实验结果与分析1. 进程创建与状态转换通过实验,我们成功创建了父进程和子进程,并观察到进程ID的变化。
在进程创建过程中,父进程的进程ID与子进程的进程ID不同,说明子进程是独立于父进程的实体。
Linux的进程管理实验报告
![Linux的进程管理实验报告](https://img.taocdn.com/s3/m/ccf547bb960590c69ec376da.png)
实验报告Linux进程管理实验内容:1,进程运行控制命令2,进程管理命令3,调度进程命令4,信息管理命令姓名:学好:520913080429专业:信息安全09-041,进程运行控制命令[root@localhost ~]# find / -name testing & <==将该执行程序放在后台执行[1] 5673You have new mail in /var/spool/mail/root[root@localhost ~]# fg <=将该程序教会屏幕前执行find / -name testing[1]+ Stopped find / -name testing[root@localhost ~]#[root@localhost /]# vi .bashrc[2]+ Stopped vi .bashrc <=两个进程被丢到后台当中[root@localhost /]#[root@localhost /]# jobs[1]- Stopped find / -name testing (wd: ~)[2]+ Stopped vi .bashrc[root@localhost /]# <=显示有两个工作在后台下,状态为停止[root@localhost /]# find / -name test/usr/lib/ruby/1.8/test/usr/lib/python2.4/email/test/usr/lib/python2.4/test/usr/lib/python2.4/bsddb/test/usr/lib/pgsql/test/usr/bin/test/usr/include/boost/mpl/aux_/test/usr/include/boost/test/usr/share/pear/test/usr/share/doc/db4-devel-4.3.29/ref/test/usr/share/doc/lynx-2.8.5/test/usr/share/doc/ncurses-devel-5.5/test[3]+ Stopped find / -name test[root@localhost /]#[root@localhost /]# vi .bashrc[4]+ Stopped vi .bashrc[root@localhost /]#[root@localhost /]# jobs[1] Stopped find / -name testing (wd: ~)[2] Stopped vi .bashrc[3]- Stopped find / -name test[4]+ Stopped vi .bashrc[root@localhost /]#[root@localhost /]# bg %1[1] find / -name testing & (wd: ~)[root@localhost /]# /usr/share/doc/kernel-doc-2.6.18/Documentation/ABI/testing [root@localhost /]#[root@localhost /]# jobs[1] Running find / -name testing & (wd: ~)[2] Stopped vi .bashrc[3]- Stopped find / -name test[4]+ Stopped vi .bashrc[root@localhost /]# /work/mini2440/linux-2.6.32.2-mini2440/Documentation/ABI/testing[root@localhost /]#[root@localhost /]# bg %2[2] vi .bashrc &[root@localhost /]# jobs[1] Running find / -name testing & (wd: ~)[2]+ Stopped vi .bashrc[3] Stopped find / -name test[4]- Stopped vi .bashrc2,进程管理命令[root@localhost ~]# ps -auxWarning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 2044 636 ? Ss 12:05 0:01 init [5]root 2 0.0 0.0 0 0 ? S 12:05 0:00 [migration/0]root 3 0.0 0.0 0 0 ? SN 12:05 0:00 [ksoftirqd/0]root 4 0.0 0.0 0 0 ? S 12:05 0:00 [watchdog/0]root 5 0.0 0.0 0 0 ? S< 12:05 0:00 [events/0]root 6 0.0 0.0 0 0 ? S< 12:05 0:00 [khelper]root 7 0.0 0.0 0 0 ? S< 12:05 0:00 [kthread]root 9 0.0 0.0 0 0 ? S< 12:05 0:00 [xenwatch]root 10 0.0 0.0 0 0 ? S< 12:05 0:00 [xenbus]root 12 0.0 0.0 0 0 ? S< 12:05 0:00 [kblockd/0]root 13 0.0 0.0 0 0 ? S< 12:05 0:00 [kacpid]root 177 0.0 0.0 0 0 ? S< 12:05 0:00 [cqueue/0]root 181 0.0 0.0 0 0 ? S< 12:05 0:00 [khubd]root 183 0.0 0.0 0 0 ? S< 12:05 0:00 [kseriod]root 238 0.0 0.0 0 0 ? S 12:05 0:00 [pdflush]root 239 0.0 0.0 0 0 ? S 12:05 0:00 [pdflush]root 240 0.0 0.0 0 0 ? S< 12:05 0:00 [kswapd0]root 241 0.0 0.0 0 0 ? S< 12:05 0:00 [aio/0]root 445 0.0 0.0 0 0 ? S< 12:05 0:00 [kpsmoused]root 475 0.0 0.0 0 0 ? S< 12:05 0:00 [scsi_eh_0]root 480 0.0 0.0 0 0 ? S< 12:05 0:00 [kmirrord]root 485 0.0 0.0 0 0 ? S< 12:05 0:00 [ksnapd]root 488 0.0 0.0 0 0 ? S< 12:06 0:01 [kjournald]root 516 0.0 0.0 0 0 ? S< 12:06 0:00 [kauditd]root 550 0.0 0.0 2388 816 ? S<s 12:06 0:01 /sbin/udevd -droot 1271 0.0 0.0 0 0 ? S< 12:06 0:00 [kgameportd]root 2162 0.0 0.0 0 0 ? S< 12:07 0:00 [kjournald]root 2652 0.0 0.2 5276 2584 ? S 12:07 0:01 /usr/sbin/vmtoolsdroot 2704 0.0 0.2 9840 2088 ? Ss 12:07 0:00 cupsdroot 3164 0.0 0.0 12060 636 ? S<sl 12:08 0:00 auditdroot 3166 0.0 0.3 9504 3712 ? S<s 12:08 0:00 python /sbin/audispdroot 3180 0.0 0.0 1704 584 ? Ss 12:08 0:00 syslogd -m 0root 3183 0.0 0.0 1656 404 ? Ss 12:08 0:00 klogd -xrpc 3216 0.0 0.0 1784 548 ? Ss 12:08 0:00 portmaproot 3245 0.0 0.0 1800 732 ? Ss 12:08 0:00 rpc.statdroot 3278 0.0 0.0 4952 568 ? Ss 12:08 0:00 rpc.idmapddbus 3297 0.0 0.1 2852 964 ? Ss 12:08 0:00 dbus-daemon --systemroot 3308 0.0 0.0 2128 756 ? Ss 12:08 0:00 /usr/sbin/hcidroot 3312 0.0 0.0 1724 496 ? Ss 12:08 0:00 /usr/sbin/sdpdroot 3337 0.0 0.0 0 0 ? S< 12:08 0:00 [krfcommd]root 3376 0.0 0.1 33192 1284 ? Ssl 12:08 0:00 pcscdroot 3395 0.0 0.0 1896 444 ? Ss 12:08 0:00 /usr/bin/hidd --serverroot 3415 0.0 0.1 9344 1108 ? Ssl 12:08 0:00 automountroot 3434 0.0 0.0 1656 524 ? Ss 12:08 0:00 /usr/sbin/acpidroot 3445 0.0 0.0 5088 496 ? Ss 12:08 0:00 ./hpiodroot 3450 0.0 0.4 13172 4548 ? S 12:08 0:00 python ./hpssd.pyroot 3465 0.0 0.0 5184 924 ? Ss 12:08 0:00 /usr/sbin/sshdroot 3477 0.0 0.0 2680 884 ? Ss 12:08 0:00 xinetd -stayalive -pidfile /var/root 3497 0.0 0.1 8500 1804 ? Ss 12:08 0:00 sendmail: accepting connections smmsp 3505 0.0 0.1 7564 1448 ? Ss 12:08 0:00 sendmail: Queue runner@01:00:00 root 3518 0.0 0.0 1876 352 ? Ss 12:08 0:00 gpm -m /dev/input/mice -t exps2 root 3529 0.0 0.1 5476 1112 ? Ss 12:08 0:00 crondxfs 3564 0.0 0.1 3940 1780 ? Ss 12:08 0:00 xfs -droppriv -daemonroot 3575 0.0 0.0 1652 504 ? SNs 12:08 0:00 anacron -sroot 3585 0.0 0.0 2216 436 ? Ss 12:08 0:00 /usr/sbin/atdroot 3624 0.5 1.2 25456 12156 ? S 12:08 0:14 /usr/bin/python /usr/sbin/yum-up avahi 3650 0.0 0.1 2684 1364 ? Ss 12:09 0:01 avahi-daemon: running [localhost avahi 3651 0.0 0.0 2552 316 ? Ss 12:09 0:00 avahi-daemon: chroot helper68 3663 0.1 0.4 6236 4308 ? Ss 12:09 0:03 haldroot 3664 0.0 0.1 3112 964 ? S 12:09 0:00 hald-runner68 3670 0.0 0.0 1980 788 ? S 12:09 0:00 hald-addon-acpi: listening on ac68 3677 0.0 0.0 1976 788 ? S 12:09 0:00 hald-addon-keyboard: listening o root 3688 0.0 0.0 1936 616 ? S 12:09 0:00 hald-addon-storage: polling /dev root 3955 0.0 0.0 2100 932 ? S 12:09 0:00 xenstored --pid-file /var/run/xeroot 3961 0.0 0.0 12152 420 ? Sl 12:09 0:00 xenconsoledroot 3963 0.0 0.4 11844 3940 ? S 12:09 0:00 python /usr/sbin/xend startroot 3964 0.0 0.5 63064 4924 ? Sl 12:09 0:00 python /usr/sbin/xend startroot 3965 0.0 0.0 13496 600 ? Ssl 12:09 0:00 blktapctrlroot 4344 0.0 0.0 2292 708 ? Ss 12:09 0:00 /sbin/dhclient -1 -q -lf /var/liroot 4466 0.0 0.0 1912 336 ? S 12:09 0:00 /usr/sbin/smartd -q neverroot 4478 0.0 0.0 1640 432 tty1 Ss+ 12:09 0:00 /sbin/mingetty tty1root 4480 0.0 0.0 1640 428 tty2 Ss+ 12:09 0:00 /sbin/mingetty tty2root 4481 0.0 0.0 1636 428 tty3 Ss+ 12:09 0:00 /sbin/mingetty tty3root 4482 0.0 0.0 1640 432 tty4 Ss+ 12:09 0:00 /sbin/mingetty tty4root 4483 0.0 0.0 1640 432 tty5 Ss+ 12:09 0:00 /sbin/mingetty tty5root 4509 0.0 0.0 1636 428 tty6 Ss+ 12:09 0:00 /sbin/mingetty tty6root 4510 0.0 0.4 16964 4248 ? Ss 12:09 0:00 /usr/sbin/gdm-binary -nodaemon root 4585 0.0 0.2 15988 2652 ? S 12:09 0:00 /usr/sbin/gdm-binary -nodaemon root 4589 0.0 0.1 16964 1508 ? S 12:09 0:00 /usr/sbin/gdm-binary -nodaemon root 4591 0.3 1.3 19960 12916 tty7 Ss+ 12:09 0:08 /usr/bin/Xorg :0 -br -audit 0 -aroot 4799 0.0 0.6 23060 6000 ? Ss 12:15 0:00 /usr/bin/gnome-sessionroot 4828 0.0 0.0 0 0 ? Z 12:15 0:00 [Xsession] <defunct>root 4861 0.0 0.0 4308 508 ? Ss 12:15 0:00 /usr/bin/ssh-agent /usr/bin/dbus root 4864 0.0 0.0 2756 504 ? S 12:15 0:00 /usr/bin/dbus-launch --exit-with root 4865 0.0 0.0 2720 848 ? Ss 12:15 0:00 /bin/dbus-daemon --fork --print- root 4871 0.0 0.3 7348 3416 ? S 12:15 0:00 /usr/libexec/gconfd-2 5root 4875 0.0 0.0 2552 588 ? S 12:15 0:00 /usr/bin/gnome-keyring-daemon root 4877 0.0 0.8 34028 8044 ? Sl 12:15 0:00 /usr/libexec/gnome-settings-daem root 4894 0.0 1.1 25160 11280 ? Ss 12:15 0:00 /usr/lib/scim-1.0/scim-launcherroot 4907 0.0 1.1 39776 11528 ? Ss 12:15 0:00 metacity --sm-client-id=default1root 4912 0.0 1.4 98520 14212 ? Ss 12:15 0:02 gnome-panel --sm-client-id defau root 4914 0.3 1.8 136400 18176 ? Ss 12:15 0:07 nautilus --no-default-window --sroot 4918 0.0 0.3 38896 2948 ? Ssl 12:15 0:00 /usr/libexec/bonobo-activation-s root 4922 0.0 0.3 11360 3092 ? S 12:15 0:00 /usr/libexec/gnome-vfs-daemon root 4926 0.0 0.8 44884 8096 ? Ss 12:15 0:00 eggcups --sm-client-id default4root 4938 0.3 1.9 77512 18920 ? S 12:15 0:08 /usr/lib/vmware-tools/bin32/vmwa root 4941 0.0 0.0 6452 576 ? Ss 12:15 0:00 /usr/lib/scim-1.0/scim-helper-ma root 4942 0.0 0.6 49540 6596 ? Ssl 12:15 0:00 /usr/lib/scim-1.0/scim-panel-gtk root 4946 0.0 0.5 14584 4996 ? Ss 12:15 0:00 bt-applet --sm-disableroot 4948 0.0 0.0 13548 816 ? Ss 12:15 0:00 /usr/lib/scim-1.0/scim-launcher root 4952 0.1 1.3 25236 13336 ? Ss 12:15 0:04 /usr/bin/python -tt /usr/bin/pup root 4960 0.0 0.1 2536 1196 ? S 12:16 0:00 /usr/libexec/gam_serverroot 4962 0.0 1.3 97264 12776 ? S 12:16 0:00 /usr/libexec/wnck-applet --oaf-a root 4964 0.0 0.9 104952 8800 ? S 12:16 0:00 /usr/libexec/trashapplet --oaf-aroot 4980 0.0 0.2 17280 2212 ? Sl 12:16 0:00 ./escd --key_Inserted="/usr/bin/ root 4983 0.1 0.9 74352 9260 ? Ss 12:16 0:02 nm-applet --sm-disableroot 4985 0.0 0.0 2452 828 ? S 12:16 0:00 /usr/libexec/mapping-daemonroot 4992 0.0 0.4 15396 4608 ? Ss 12:16 0:01 pam-panel-icon --sm-client-id de root 4995 0.0 0.6 74052 6320 ? Ss 12:16 0:00 gnome-power-managerroot 4996 0.0 0.0 1820 620 ? S 12:16 0:00 /sbin/pam_timestamp_check -d roo root 5017 0.0 0.4 16404 4068 ? Ss 12:16 0:00 gnome-screensaverroot 5029 0.6 2.6 64052 25252 ? S 12:16 0:14 /usr/bin/python -E /usr/bin/seal root 5046 0.0 0.6 23148 6532 ? S 12:16 0:01 /usr/libexec/notification-area-a root 5049 0.1 1.3 97332 12944 ? S 12:17 0:02 /usr/libexec/mixer_applet2 --oaf root 5052 0.1 1.2 48824 11612 ? S 12:17 0:02 /usr/libexec/clock-applet --oaf-root 5061 0.0 0.1 12292 1000 ? S 12:17 0:00 scim-bridgeroot 5437 0.0 1.7 131360 17252 ? Sl 12:28 0:00 gnome-terminalroot 5442 0.0 0.0 2452 660 ? S 12:28 0:00 gnome-pty-helperroot 5443 0.0 0.1 5052 1516 pts/1 Ss 12:28 0:00 bashroot 5933 0.0 0.1 5004 1248 pts/1 T 12:44 0:00 vi .bashrcroot 6062 0.0 0.1 4800 1108 pts/1 T 12:48 0:00 find / -name testroot 6159 0.0 0.1 5028 1308 pts/1 T 12:50 0:00 vi .bashrcroot 6271 0.0 0.0 4476 952 pts/1 R+ 12:54 0:00 ps -aux[root@localhost ~]#USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDUSER :进程属于那个人的PID :进程号%CPU :使用了多少CPU资源%MEM :使用了多少RAMVSZ RSS :占用的Ram的大小TTY :若为tty1-tty6则为本机用户,STAT :该进程的状态START :该进程开始的日期TIME :该进程运行了多久的时间COMMAND :该进程的内容[root@localhost ~]# toptop - 13:06:05 up 1:00, 1 user, load average: 0.00, 0.01, 0.08Tasks: 123 total, 2 running, 117 sleeping, 3 stopped, 1 zombieCpu(s): 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 962500k total, 826544k used, 135956k free, 215324k buffers Swap: 2031608k total, 0k used, 2031608k free, 411772k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND4591 root 15 0 38392 12m 5316 S 1.3 1.3 0:09.46 Xorg5437 root 15 0 128m 17m 10m R 0.3 1.8 0:00.75 gnome-terminal1 root 15 0 2044 636 540 S 0.0 0.1 0:01.04 init2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/03 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/04 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/05 root 10 -5 0 0 0 S 0.0 0.0 0:00.12 events/06 root 20 -5 0 0 0 S 0.0 0.0 0:00.02 khelper7 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread9 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 xenwatch10 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 xenbus12 root 10 -5 0 0 0 S 0.0 0.0 0:00.42 kblockd/013 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid177 root 18 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/0181 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd183 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kseriod238 root 23 0 0 0 0 S 0.0 0.0 0:00.00 pdflush239 root 15 0 0 0 0 S 0.0 0.0 0:00.51 pdflush240 root 18 -5 0 0 0 S 0.0 0.0 0:00.00 kswapd0241 root 18 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0445 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 kpsmoused 475 root 18 -5 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_0480 root 19 -5 0 0 0 S 0.0 0.0 0:00.00 kmirrord485 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 ksnapd488 root 10 -5 0 0 0 S 0.0 0.0 0:01.28 kjournald516 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kauditd550 root 17 -4 2388 816 372 S 0.0 0.1 0:01.48 udevd1271 root 17 -5 0 0 0 S 0.0 0.0 0:00.00 kgameportd 2162 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kjournald 2652 root 15 0 5276 2584 2152 S 0.0 0.3 0:01.59 vmtoolsdYou have new mail in /var/spool/mail/rootTop为动态进程查看cpu使用的情况[root@localhost ~]# sar -u 1 3Linux 2.6.18-8.el5xen (localhost.localdomain) 2011年11月07日13时09分33秒CPU %user %nice %system %iowait %steal %idle13时09分34秒all 1.00 0.00 1.00 0.00 0.00 98.0013时09分35秒all 3.96 0.00 0.00 0.000.00 96.0413时09分36秒all 0.00 0.00 1.00 0.00 0.00 99.00Average: all 1.66 0.00 0.66 0.00 0.00 97.67[root@localhost ~]#查看内存的使用情况[root@localhost ~]# sar -r 1 3Linux 2.6.18-8.el5xen (localhost.localdomain) 2011年11月07日13时10分44秒kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad13时10分45秒134656 827844 86.01 215596 411924 2031608 0 0.00 013时10分46秒134656 827844 86.01 215596 411924 2031608 0 0.00 013时10分47秒134656 827844 86.01 215596 411924 2031608 0 0.00 0Average: 134656 827844 86.01 215596 411924 2031608 0 0.00 0You have new mail in /var/spool/mail/root[root@localhost ~]#关闭进程PID为2652的进程[root@localhost ~]# kill -9 2652[root@localhost ~]#查看系统的内核版本,主机名称,cpu信息[root@localhost ~]# uname -aLinux localhost.localdomain 2.6.18-8.el5xen #1 SMP Fri Jan 26 14:42:21 EST 2007 i686 i686 i386 GNU/LinuxYou have new mail in /var/spool/mail/root[root@localhost ~]#了解cpu的详细信息[root@localhost ~]# more /proc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 6model : 23model name : Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz stepping : 10cpu MHz : 2925.552cache size : 3072 KBfdiv_bug : nohlt_bug : nof00f_bug : nocoma_bug : nofpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsrsse sse2 ss nx lm constant_tsc up pni cx16 lahf_lmbogomips : 7338.60[root@localhost ~]#查看进程的优先级[root@localhost ~]# ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD0 S 0 5443 5437 0 75 0 - 1263 wait pts/1 00:00:00 bash0 T 0 5933 5443 0 75 0 - 1251 finish pts/1 00:00:00 vi0 T 0 6062 5443 0 77 0 - 1200 finish pts/1 00:00:00 find0 T 0 6159 5443 0 78 0 - 1257 finish pts/1 00:00:00 vi4 R 0 7163 5443 0 77 0 - 1107 - pts/1 00:00:00 ps 3,调度进程命令[root@localhost ~]#[root@localhost ~]# at 5pmat> shutdown -h -nowat> You have new mail in /var/spool/mail/root[root@localhost ~]# atq[root@localhost ~]# at 5pm shutdown -h -nowUsage: at [-V] [-q x] [-f file] [-m] timeat [-V] [-q x] [-f file] [-m] -t [[CC]YY]MMDDhhmmat -c job [job...](atq | at -l) [-V] [-q x](atrm | at -d | at -r) [-V] [-q x] job ...batch [-V] [-f file] [-m][root@localhost ~]# at -qat: option requires an argument -- qUsage: at [-V] [-q x] [-f file] [-m] timeat [-V] [-q x] [-f file] [-m] -t [[CC]YY]MMDDhhmmat -c job [job...](atq | at -l) [-V] [-q x](atrm | at -d | at -r) [-V] [-q x] job ...batch [-V] [-f file] [-m][root@localhost ~]#[root@localhost ~]#[root@localhost ~]# crontab –e[root@localhost ~]# at 6pmat> sar -u 1 3at> <EOT>job 1 at 2011-11-10 18:00[root@localhost ~]#[root@localhost ~]# atq1 2011-11-10 18:00 a root 一个任务[root@localhost ~]#0 12 * * *mail test </home/test/test.txt[root@localhost ~]# crontab –r 删除所有[root@localhost ~]#crontab –l[root@localhost ~]# atq[root@localhost ~]# vi /etc/crontab 启动iv编辑器SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly4,信息管理命令[root@localhost ~]# dmesg 显示开机信息[root@localhost ~]#dmesg | more[root@localhost ~]#uptime 查看系统开机时间[root@localhost ~]# uptime08:52:55 up 16 min, 1 user, load average: 0.02, 0.51, 0.55 [root@localhost ~]#whoroot pts/1 2011-11-10 08:49 (:0.0)[root@localhost ~]#[root@localhost ~]# whoamiroot[root@localhost ~]# [root@localhost ~]#last -5。
操作系统实验报告(包括线程,进程,文件系统管理,linux+shell简单命令)
![操作系统实验报告(包括线程,进程,文件系统管理,linux+shell简单命令)](https://img.taocdn.com/s3/m/38436ad233d4b14e852468c9.png)
操作系统实验报告班级:030613学号:03061331姓名:裴帅帅实验一:进程的建立一、实验内容创建进程及子进程,在父子进程间实现进程通信,创建进程并显示标识等进程控制块的属性信息,显示父子进程的通信信息和相应的应答信息。
使用匿名管道实现父子进程之间的通信。
二、源程序1、创建匿名管道SECURITY_ATTRIBUTES sa;sa.bInheritHandle=true;sa.lpSecurityDescriptor=NULL;sa.nLength=sizeof(SECURITY_ATTRIBUTES);if(!CreatePipe(&m_hRead,&m_hWrite,&sa,0)){MessageBox("创建匿名管道失败");return false;}2、创建子进程STARTUPINFO si;ZeroMemory(&si,sizeof(STARTUPINFO));si.cb=sizeof(STARTUPINFO);si.dwFlags=STARTF_USESTDHANDLES;si.hStdInput=m_hRead;si.hStdOutput=m_hWrite;si.hStdError=GetStdHandle(STD_ERROR_HANDLE);if(!CreateProcess(NULL,"子进.exe",NULL,NULL,true,0,NULL,NULL,&si,&pi)) {MessageBox("创建子进程失败");CloseHandle(m_hRead);CloseHandle(m_hWrite);m_hRead=NULL;m_hWrite=NULL;return;}3、销毁子进程if(m_hRead)CloseHandle(m_hRead);if(m_hWrite)CloseHandle(m_hWrite);TerminateProcess(pi.hProcess ,0);4、向匿名管道中写信息即发送信息DWORD deWrite;CString sendData;m_s.GetWindowText(sendData);int length;length=sendData.GetLength ();char *buffer=new char[length+1];for(int i=0;i<length;i++){buffer[i]=sendData[i];}buffer[length]='\0';if(!WriteFile(m_hWrite,buffer,length,&deWrite,NULL)){MessageBox("发送数据失败");}delete buffer;5、从匿名管道中读取信息即接收信息char buff[100];DWORD deRead;if(!ReadFile(m_hRead,buff,100,&deRead,NULL)){MessageBox("读取数据失败");}CString receiveData;for(int i=0;i<=(int)deRead;i++){receiveData+=buff[i];}receiveData+='\0';m_r.SetWindowText (receiveData);三、实验结果实验结果实现了父进程向匿名管道中写信息,然后在子进程端可以从匿名管道中读取该信息;也可以子进程向管道中写入信息,然后父进程从中读取后显示。
操作系统实验4-Linux 进程管理
![操作系统实验4-Linux 进程管理](https://img.taocdn.com/s3/m/88690b44960590c69fc3763b.png)
实验四Linux进程管理实验—、实验目的1 .在本实验中学习Linux操作系统的进程状态,并通过编写一些简单代码来观察各种情况下,Linux进程的状态, 进一步理解进程的状态及其转换机制。
2.通过本实验学习如何创建Linux进程及线程,通过实验,观察Linux进程及线程的异步执行。
理解进程及线程的区别及特性,进一步理解进程是资源分配单位,线程是独立调度单位。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Linux Ubuntu操作系统,gcc编译器。
三、实验内容和步骤1、Linux进程状态及其相互转换Linux系统中的进程主要有以下六种状态。
(1)TASK_RUNNING (可运行状态)。
正在运行的进程或在可运行进程队列(run_queue)中等待运行的进程处于该状态。
它实际上包含一般操作系统原理教材中所谓进程三种基本状态中的运行态和就绪两种状态。
当CPU空闲时,进程调度程序只在处于该状态的进程中选择优先级最高的进程运行。
Linux中运行态的进程可以进一步细分为3种:内核运行态、用户运行态和就绪态。
(2)TASKJNTERRUPTIBLE (可中断阻塞状态)。
处于可中断阻塞状态的进程排成一个可中断阻塞状态进程队列, 该队列中的阻塞进程在资源有效时,能被信号或中断唤醒进入到运行态队列。
(3)TASK.UNINTERRUPTIBLE (不可中断阻塞状态)。
不可中断指的是进程不响应信号。
处于不可中断阻塞状态的进程排成一个不可中断阻塞状态进程队列。
该队列中的阻塞进程,不可被其他进程唤醒,只有被使用wake_up() 函数明确唤醒时才能转换到可运行的就绪状态。
(4)TASK_STOP/TASK_TRACED (暂停状态)。
当进程收到信号 SIGSTOP、SIGTSTP. SIGTTIN 或 SIGTTOU 时就会进入暂停状态。
可向其发送SIGCONT信号,让进程转换到可运行状态。
(5)TASK_DEAD-EXIT_ZOMBIE (僵死状态)。
电大进程管理实验报告(3篇)
![电大进程管理实验报告(3篇)](https://img.taocdn.com/s3/m/47eea34a443610661ed9ad51f01dc281e43a5661.png)
第1篇一、实验目的本次实验旨在通过实际操作,让学生深入理解Linux操作系统的进程管理机制,掌握进程的创建、调度、同步与通信等基本概念和操作方法。
通过实验,使学生能够熟练运用Linux命令和编程技术,解决实际问题。
二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 实验工具:xshell、gcc三、实验内容本次实验主要包括以下内容:1. 进程的创建与终止2. 进程的调度与优先级3. 进程同步与互斥4. 进程通信四、实验步骤1. 进程的创建与终止(1)使用fork()函数创建子进程:```cpid_t pid = fork();if (pid == 0) {// 子进程代码} else if (pid > 0) {// 父进程代码} else {// 创建子进程失败}```(2)使用wait()函数等待子进程结束:```cint status;waitpid(pid, &status, 0);```(3)使用kill()函数终止进程:```ckill(pid, SIGTERM);```2. 进程的调度与优先级(1)使用nice()函数调整进程优先级:```cnice(-n); // 降低进程优先级```(2)使用renice()函数实时调整进程优先级: ```crenice(n, pid);```3. 进程同步与互斥(1)使用互斥锁(mutex)实现进程互斥:```cpthread_mutex_t mutex;pthread_mutex_init(&mutex, NULL);pthread_mutex_lock(&mutex);// 临界区代码pthread_mutex_unlock(&mutex);pthread_mutex_destroy(&mutex);```(2)使用条件变量(condition variable)实现进程同步: ```cpthread_cond_t cond;pthread_cond_init(&cond, NULL);pthread_cond_wait(&cond, &mutex);// 条件满足后的代码pthread_cond_signal(&cond);pthread_cond_destroy(&cond);```4. 进程通信(1)使用管道(pipe)实现进程间通信:```cint pipefd[2];pipe(pipefd);// 父进程dup2(pipefd[1], STDOUT_FILENO);// 子进程dup2(pipefd[0], STDIN_FILENO);```(2)使用消息队列(message queue)实现进程间通信: ```ckey_t key = ftok("queuefile", 'q');int msqid = msgget(key, 0666 | IPC_CREAT);// 发送消息struct msgbuf msg;msg.mtype = 1;strcpy(msg.mtext, "Hello");msgsnd(msqid, &msg, strlen(msg.mtext), 0);// 接收消息msgrcv(msqid, &msg, sizeof(msg.mtext), 1, 0);printf("%s\n", msg.mtext);```五、实验结果与分析通过本次实验,我们成功实现了以下功能:1. 创建并管理多个进程;2. 调整进程优先级;3. 实现进程同步与互斥;4. 实现进程间通信。
linux进程线程管理实验报告
![linux进程线程管理实验报告](https://img.taocdn.com/s3/m/8bdba6c1011ca300a7c39096.png)
ﻩﻩelse{
ﻩﻩﻩproc_number=i;
ﻩdo_something();
ﻩﻩ}
}
/* 让用户选择杀死哪个进程。输入数字(自编号)表示杀死该进程
* 输入q退出 */
while((ch=getchar())!='q'){
ﻩﻩif(isdigit(ch)){
kill(pid[ch-'0'],SIGTERM);
* 父进程把子进程的id保存到pid[i] */
ﻩfor(i=0;i<child_proc_number;i++){
ﻩﻩchild_pid=fork();
ﻩif(child_pid==-1){
ﻩﻩperror("creat error!\n");
ﻩreturn 1;
ﻩ}
ﻩelseif(child_pid>0)
第二次是杀死本组所有进程。即主进程以及它创建的所有子进程。执行后程序退出,进程结束。
Linux 操作系统,内核2.4.26 以上,预装有X-Window 、vi、gcc、gdb 和任ﻫ意web 浏览器。
2.2 实验前的准备工作
学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参ﻫ考资料,学会fork 与kill 的用法。ﻫ复习C 语言的相关内容。
三、实验内容
3.1 补充POSIX 下进程控制的残缺版实验程序
3.2回答下列问题:
1. 你最初认为运行结果会怎么样?
2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。
3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?
linux进程与线程通讯实验报告
![linux进程与线程通讯实验报告](https://img.taocdn.com/s3/m/86507718d1f34693dbef3e74.png)
linux 进程与线程通讯实验报告操作系统实验一进程与线程—Linux 进程与线程通讯实验报告操作系统课程设计任务书篇二: 操作系统实验Linux 进程与线程通讯Linux 进程与线程通讯报告人:设计目的1、深刻理解线程和进程的概念2、掌握线程与进程在组成成分上的差别以及与其相适应的通讯方式和应用目标。
设计的内容1、以Linux 系统进程和线程机制为背景,掌握fork() 和clone() 系统调用的2、形式和功能以及与其相适应的高级通讯方式。
由fork 派生的子进程之间通过pipe 通讯,由clone 创建的线程之间通过共享内存通讯,对于后者需要考虑互斥问题。
3、以生产者-消费者问题为例,通过实验理解fork() 和clone() 两个系统调的区别。
程序要求能够创建4 个进程或线程,其中包括两个生产者和两个消费者,生产者和消费者之间能够传递数据。
4、设计准备1、fork 系统调用、pid=fork()创建一个子进程,子进程是父进程的完整复制,正常返回值为非负整数,对于 父进程来说该数大于 0,是子进程的编号 (pid); 对于子进程来说该数为 0。
正是利用反回值的差别可以决定二者不同的后继动作。
2、 clone 系统调用int clone(int (*fn)(void * arg), void *stack, int flags, void * arg);其中 fn 是轻进程所执行的函数, stack 是轻进程所使用的栈, flag 是CLONE_VM, CLONE_FS, CLONE_FILES,LONE_SIGHAND,CLONE_的组合,arg 是调用过程的对应参数。
Clone()的关键是flag 的设定,CLONE_V S 示子进程共享父进程内存,CLONE_F 表示子进程共3、 pipe 系统调用et_val=pipe(fd);参数定义为 int fd[2] 。
创建一个管道文件,返回两个文件描述符 fd[0] 和fd[1] 分别用于管道文件的读和写操作。
实验进程管理实验报告
![实验进程管理实验报告](https://img.taocdn.com/s3/m/93af4c9a59f5f61fb7360b4c2e3f5727a5e924f2.png)
一、实验目的1. 加深对进程概念的理解,明确进程和程序的区别。
2. 进一步认识并发执行的实质,理解进程的创建、调度、同步与通信。
3. 学习使用Linux系统中的进程管理命令,掌握进程的监控、控制与优化。
二、实验环境操作系统:Linux Ubuntu 20.04实验工具:终端(Terminal)、shell命令三、实验内容1. 进程的基本概念与特性2. 进程的创建与调度3. 进程同步与通信4. 进程的监控与优化四、实验步骤1. 进程的基本概念与特性(1)通过阅读相关资料,了解进程的概念、特性和生命周期。
(2)使用shell命令查看当前系统中进程的状态,如ps、top、htop等。
2. 进程的创建与调度(1)使用fork()函数创建进程,观察父子进程之间的关系。
(2)使用exec()函数替换子进程的映像,实现进程的创建。
(3)使用wait()、waitpid()等函数等待子进程结束,控制进程执行顺序。
(4)通过修改进程优先级,观察进程调度策略的变化。
3. 进程同步与通信(1)使用互斥锁(mutex)实现进程同步,防止数据竞争。
(2)使用条件变量(condition variable)实现进程间的条件同步。
(3)使用信号量(semaphore)实现进程间的同步与通信。
(4)通过管道(pipe)、消息队列(message queue)、共享内存(shared memory)等机制实现进程间的通信。
4. 进程的监控与优化(1)使用ps、top、htop等命令监控进程的运行状态。
(2)通过调整进程优先级,优化进程的执行顺序。
(3)使用renice命令调整进程的实时性。
(4)使用nice命令调整进程的调度策略。
五、实验结果与分析1. 进程的基本概念与特性通过实验,我们了解到进程是具有一定独立功能的程序关于某个数据集合的一次运行活动,具有并发性、动态性、独立性、异步性和结构特征等特性。
2. 进程的创建与调度实验过程中,我们成功创建了多个进程,并通过修改进程优先级,观察到调度策略的变化。
进程管理实验报告
![进程管理实验报告](https://img.taocdn.com/s3/m/c1e45169ef06eff9aef8941ea76e58fafab045d1.png)
一、实验目的1. 理解进程的概念及其在操作系统中的作用。
2. 掌握Linux环境下进程的创建、调度、同步与通信等基本操作。
3. 通过实验加深对进程管理知识的理解和应用。
二、实验环境1. 操作系统:Linux2. 实验工具:xshell、vi编辑器、gcc编译器三、实验内容1. 进程的创建与终止2. 进程的调度策略3. 进程同步与互斥4. 进程间的通信四、实验步骤1. 进程的创建与终止(1)编写C语言程序,使用fork()系统调用创建子进程。
(2)通过exec()系统调用执行新的程序,实现进程替换。
(3)使用waitpid()函数等待子进程结束。
(4)使用kill()函数终止指定进程。
2. 进程的调度策略(1)观察Linux系统中进程调度算法,如FCFS、RR、SJF等。
(2)编写程序,模拟不同的调度算法,分析其性能。
3. 进程同步与互斥(1)使用信号量实现进程同步,如生产者-消费者问题。
(2)使用互斥锁实现进程互斥,如银行家算法。
4. 进程间的通信(1)使用管道实现进程间通信。
(2)使用消息队列实现进程间通信。
(3)使用共享内存实现进程间通信。
五、实验结果与分析1. 进程的创建与终止通过实验,我们掌握了使用fork()、exec()、waitpid()、kill()等系统调用创建、替换、等待和终止进程的方法。
在实际应用中,进程的创建与终止是进程管理的基础。
2. 进程的调度策略通过模拟不同的调度算法,我们发现FCFS算法简单,但效率较低;RR算法适用于交互式系统,但可能导致进程饥饿;SJF算法效率较高,但难以实现。
在实际应用中,应根据系统需求选择合适的调度算法。
3. 进程同步与互斥通过使用信号量和互斥锁,我们实现了进程同步与互斥。
在实际应用中,进程同步与互斥是保证系统正确性和效率的关键。
4. 进程间的通信通过使用管道、消息队列和共享内存,我们实现了进程间的通信。
在实际应用中,进程间的通信是提高系统并发性和效率的重要手段。
linux进程管理的实验报告
![linux进程管理的实验报告](https://img.taocdn.com/s3/m/450389c3e43a580216fc700abb68a98271feac30.png)
linux进程管理的实验报告Linux进程管理的实验报告引言:Linux操作系统是一种开源的操作系统,以其稳定性和高度可定制性而受到广泛使用。
在Linux系统中,进程管理是一个重要的组成部分,它负责控制和管理系统中运行的进程。
本实验报告旨在探讨Linux进程管理的相关概念和实践。
一、进程的基本概念进程是指在计算机系统中正在运行的一个程序实例。
每个进程都有自己的内存空间、寄存器和状态。
在Linux系统中,每个进程都有一个唯一的进程标识符(PID),用于标识和管理进程。
二、进程的创建和终止在Linux系统中,进程的创建是通过fork()系统调用来实现的。
fork()系统调用会创建一个新的进程,新进程是原进程的一个副本,包括代码、数据和堆栈等。
新进程和原进程共享相同的代码段,但是拥有独立的数据和堆栈。
进程的终止可以通过exit()系统调用来实现。
当一个进程调用exit()系统调用时,它会释放所有的资源,并通知操作系统该进程已经终止。
此外,父进程可以通过wait()系统调用来等待子进程的终止,并获取子进程的退出状态。
三、进程的调度和优先级在Linux系统中,进程的调度是由调度器负责的。
调度器根据进程的优先级和调度策略来确定下一个要运行的进程。
Linux系统中有多种调度策略,如先来先服务(FCFS)、最短作业优先(SJF)、轮转调度(Round Robin)等。
进程的优先级用一个数字表示,范围从-20到19,其中-20表示最高优先级,19表示最低优先级。
较高优先级的进程会被优先调度,以保证其能够及时响应用户的请求。
四、进程的状态转换在Linux系统中,进程可以处于不同的状态,如运行态、就绪态和阻塞态等。
进程的状态转换是由操作系统根据进程的行为和外部事件来控制的。
当一个进程被创建时,它处于就绪态,等待被调度执行。
当进程获得CPU资源并开始执行时,它进入运行态。
当进程需要等待某个事件发生时,如等待用户输入或等待某个文件读写完成,它会进入阻塞态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux进程线程管理实验报告————————————————————————————————作者:————————————————————————————————日期:西安郵電學院操作系统LINUX实验报告题目1:进程______题目2:线程管理__题目3:互斥_____系部名称:计算机学院专业名称:软件工程班级:0802学号:04085048学生姓名:郭爽乐时间:2010-10-31实验一: 进程管理一.实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。
二.实验要求2.1 实验环境要求1. 硬件(1) 主机:Pentium III 以上;(2) 内存:128MB 以上;(3) 显示器:VGA 或更高;(4) 硬盘空间:至少100MB 以上剩余空间。
2. 软件Linux 操作系统,内核2.4.26 以上,预装有X-Window 、vi、gcc、gdb 和任意web 浏览器。
2.2 实验前的准备工作学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参考资料,学会fork 与kill 的用法。
复习C 语言的相关内容。
三、实验内容3.1 补充POSIX 下进程控制的残缺版实验程序3.2回答下列问题:1. 你最初认为运行结果会怎么样?2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。
3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?4. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?5. 使用kill 命令可以在进程的外部杀死进程。
进程怎样能主动退出?这两种退出方式哪种更好一些?四、实验结果4.1 补充完全的源程序#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<signal.h>#include<ctype.h>#define MAX_CHILD_NUMBER 10/* 允许建立的子进程个数最大值 */ #define SLEEP_INTERV AL 1/* 子进程睡眠时间 */int proc_number=0; /* 子进程的编号,从0开始 */void do_something();main(int argc,char *argv[]){int child_proc_number=MAX_CHILD_NUMBER; /* 子进程个数 */ int i,ch;pid_t child_pid;pid_t pid[10]={0};/* 存放每个子进程的id */if(argc>1){child_proc_number=atoi(argv[1]);child_proc_number=(child_proc_number>10)?10:child_proc_number; /* 命令行参数中的第一个参数表示建立几个子进程,最多10个 */ }/*建立child_proc_number个子进程* 子进程要执行* proc_number = i;* do_something();* 父进程把子进程的id保存到pid[i] */for(i=0;i<child_proc_number;i++){child_pid=fork();if(child_pid== -1){perror("creat error!\n");return 1;}else if(child_pid>0)pid[i]=child_pid;else{proc_number=i;do_something();}}/* 让用户选择杀死哪个进程。
输入数字(自编号)表示杀死该进程* 输入q退出 */while((ch=getchar())!='q'){if(isdigit(ch)){kill(pid[ch-'0'],SIGTERM);wait(&pid[ch-'0']);}}kill(0,SIGTERM); /*杀死本组的所有进程 */return 0;}void do_something(){for(;;){printf("This is process NO.%*d\n",proc_number+3,proc_number);sleep(SLEEP_INTERV AL);}}4.2回答上述实验内容中的问题1.预期结果:会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。
2.实际结果:与预期差不多,因输入进程总数20大于设定的最大进程数,因此按进程数10来处理。
随机输出0-9号进程,sleep(SLEEP_INTERV AL),循环输出,直到输入数字键,则会杀死该数字对应的进程,直到输入q退出循环,然后杀死本组所有进程。
分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储在proc_number,然后调用死循环函数do_something(),输出该进程的代号proc_number;当输入数字键时,主进程会执行kill(pid[ch-'0'],SIGTERM),从而杀死(ch-‘0’)号进程。
当输入q时循环退出,kill(0,SIGTERM),杀死本组所有进程。
程序退出。
3. proc_number这个全局变量在各个子进程里的值相同,因为子进程相互独立,资源互不影响。
4.kill命令在程序中使用了2次:kill(pid[ch-'0'],SIGTERM); kill(0,SIGTERM);第一次是杀死该进程号pid[ch-‘0’],执行后接下来的结果中不会有该进程号,用另一个终端打开,使用命令ps aux | grep process,因为子进程先于父进程退出,则被杀死的进程为僵死状态,但我加了行代码wait(&pid[ch-'0']),就会使该子进程真正结束。
第二次是杀死本组所有进程。
即主进程以及它创建的所有子进程。
执行后程序退出,进程结束。
5.进程在main函数中return,或调用exit()函数都可以正常退出。
而使用kill命令则是异常退出。
当然是正常退出比较好,若在子进程退出前使用kill命令杀死其父进程,则系统会让init进程接管子进程。
当用kill命令使得子进程先于父进程退出时,而父进程又没有调用wait函数等待子进程结束,子进程处于僵死状态,并且会一直保持下去,直到系统重启。
子进程处于僵死状态时,内核只保存该进程的必要信息以被父进程所需,此时子进程始终占着资源,同时减少了系统可以创建的最大进程数。
实验二: 线程管理一.实验目的通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间等方面的特点,并掌握线程与进程的区别。
掌握在POSIX 规范中pthread_create() 函数的功能和使用方法。
二.实验要求2.1 实验环境要求1. 硬件(1) 主机:Pentium III 以上;(2) 内存:128MB 以上;(3) 显示器:VGA 或更高;(4) 硬盘空间:至少100MB 以上剩余空间。
2. 软件Linux 操作系统,内核2.4.26 以上,预装有X-Window 、vi、gcc、gdb 和任意web 浏览器。
2.2 实验前的准备工作阅读参考资料,了解线程的创建等相关系统调用。
三、实验内容3.1 补充POSIX 下进程控制的残缺版实验程序3.2回答下列问题:1. 你最初认为前三列数会相等吗?最后一列斜杠两边的数字是相等,还是大于或者小于关系?2. 最后的结果如你所料吗?有什么特点?试对原因进行分析。
3. thread 的CPU 占用率是多少?为什么会这样?4. thread_worker()内是死循环,它是怎么退出的?你认为这样退出好吗?四、实验结果4.1 补充完全的源程序#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<ctype.h>#include<pthread.h>#define MAX_THREAD 3/* 线程的个数 */unsigned long long main_counter,counter[MAX_THREAD];/* unsigned long long是比long还长的整数 */void* thread_worker(void*);int main(int argc,char argv[]){int i,rtn;char ch;pthread_t pthread_id[MAX_THREAD]={0};/* 存放每个线程的id */for(i=0;i<MAX_THREAD;i++){pthread_create(&pthread_id[i],NULL,thread_worker,(void*)i);/*用pthread_create建一个普通的线程,线程id存入pthread_id[i],线程执行的函数是thread_worker,并i作为参数传递给线程 */}/* 用户按一次回车执行下面的循环体一次。
按q退出 */do{unsigned long long sum=0;for(i=0;i<MAX_THREAD;i++){sum+=counter[i]; /* 求所有线程的counter的和 */printf("counter[%d]=%llu\n",i,counter[i]);}printf("main_counter=%llu/sum=%llu\n",main_counter,sum);}while((ch=getchar())!='q');return 0;}void* thread_worker(void* p){int thread_num;thread_num=(int)p; /*把main中的i的值传递给thread_num */for(;;){main_counter++;counter[thread_num]++;}}4.3回答上述实验内容中的问题1.试验运行前我认为前三列数不会相等,因为三个线程运行次数是随机的,结果不可预料,当然counter[i]值不会一定相等。