实验5:进程管理【nyist】
1.实验目的
(1)理解进程与程序的区别。
(2)了解fork( )系统调用的返回值,掌握调用fork( )创建进程的方法。
(3)掌握进程并发执行的原理,理解进程并发执行的特点,区分进程并发执行与串行执行。 (4)能够熟练使用进程管理命令对进程进行管理
2.实验环境
(1)一台已经安装好的Window系统的计算机。
(2)安装好的CentOS虚拟机。
3.实验内容
(1)使用vi编辑器编写C语言程序,调用fork函数创建进程。
编写一段程序,利用系统调用fork( )创建两个进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。
#include <stdio.h>void 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’);}}
(2)调用fork创建进程,查看进程fork函数一次调用,两个返回值,并查看两个返回值。
#include <unistd.h>
#include <stdio.h>
int main ()
{
pid_t fpid; //fpid表示fork函数返回的值
int count=0;
fpid=fork();
if (fpid < 0)
printf("error in fork!");
else if (fpid == 0) {
printf("I am the child process, my process id is %d\n",getpid());
printf("I am son.\n");
count++;
}
else {
printf("i am the parent process, my process id is %d\n",getpid());
printf("I am father!\n");
count++;
}
printf("统计结果是: %d\n",count);
return 0;
}
(2)进程管理命令
练习ps pstree top kill jobs nice renice at corntabd等进程管理命令,参考(进程管理命令文档进行练习)
4.实验步骤
- 借助百度引擎学习进程与程序的区别。
进程是一个动态的概念,而程序是一个静态的概念,程序是指令的有序集合,无执行含义,进程则强调执行的过程;进程具有并行特征(独立性,异步性),程序没有;不同的进程可以包含同一程序,同一程序在执行中也可以产生多个进程。它们的本质区别就是进程是动态的,而程序则是静态的。
- 认识fork函数。
fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。
它不需要参数并返回一个整数值。下面是fork()返回的不同值。
负值:创建子进程失败。
零:返回到新创建的子进程。
正值:返回父进程或调用者。该值包含新创建的子进程的进程ID
- 调用fork函数创建进程
编写一段程序,利用系统调用fork( )创建两个进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。
(4)查看结果
调用fork创建进程,查看进程fork函数一次调用,两个返回值,并查看两个返回值。
#include <unistd.h>
#include <stdio.h>
int main ()
{
pid_t fpid; //fpid表示fork函数返回的值
int count=0;
fpid=fork();
if (fpid < 0)
printf("error in fork!");
else if (fpid == 0) {
printf("I am the child process, my process id is %d\n",getpid());
printf("I am son.\n");
count++;
}
else {
printf("i am the parent process, my process id is %d\n",getpid());
printf("I am father!\n");
count++;
}
printf("统计结果是: %d\n",count);
return 0;
}
查看结果
(5)练习进程管理命令
练习ps pstree top kill jobs nice renice at corntabd等进程管理命令,参考(进程管理命令文档进行练习)
ps相关指令练习
pstree相关命令练习
top相关命令练习
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
高亮显示当前运行进程,敲击键盘“b”(打开/关闭加亮效果),top的视图变化如下:
敲击键盘“x”(打开/关闭排序列的加亮效果),top的视图变化如下:
可以看到,top默认的排序列是“%CPU”。通过”shift + >”或”shift + <”可以向右或左改变排序列,现在是由shr排序
top-c练习
jobs相关命令练习
#打开vim 编辑a.txt, 并且按[Ctrl+z]隐藏
$ vim a.txt
[1]+ Stopped vim a.txt
#在后台运行两个ping任务
$ ping localhost -a > /dev/null &
[2] 7868
$ ping localhost -a > /dev/null &
[3] 7869
#显示任务
$ jobs
#显示任务,并带上PID
$ jobs -l
#显示暂停的任务
$ jobs -s
#显示运行中的任务
$ jobs -r
#仅显示任务的PID
$ jobs -p
#将编号为2的任务拿到前台来运行,并按下[Ctrl+z],暂停该任务
$ fg 2
#让编号为2的任务在后台运行
$ bg 2
$ jobs
nice命令练习
不用任何参数执行命令"nice"(见第1行),所以显示出当前的程序运行优先级为0(见第2行)。由此可知系统缺省的程序运行优先级为0。
第1个nice命令以缺省值来调整第2个nice命令运行的优先级,既在系统缺省的程序运行优先级0的基础之上增加10,得到新的程序运行优先级10,然后以优先级10来运行第2个nice命令;第2个nice命令显示当前程序运行的优先级为10。
第1个nice命令以缺省值来调整第2个nice命令运行的优先级,既在系统缺省的程序运行优先级0的基础之上增加10,得到新的程序运行优先级10,然后以优先级10来运行第2个nice命令;第2个nice命令又以缺省值来调整第3个nice命令运行的优先级,既在第2个nice命令运行优先级基础之上再增加10,得到新的程序运行优先级20,但20大于最高程序运行优先级19,所以以优先级19来运行第3个nice命令;第3个nice命令显示当前程序运行的优先级为19。
以参数“-n”的形式指定程序运行优先级的调整值,系统缺省优先级0加上调整值-21得到新的优先级-21(小于-20),因此程序最终的运行优先级为-20。
参数“--1”、“-+1”和 “-1”中的第一个字符“-”都是语法定义的指定程序运行优先级调整值的标志符,第一个字符“-”之后的值为指定的程序运行优先级的调整值。
kill 相关命令练习
列出所有信号名称
得到指定信号的数值
先用ps查找进程,然后用kill杀掉
彻底杀死进程
(6)设置定时任务和周期性任务
at相关命令练习
三天后的下午 5 点钟执行 /bin/ls
明天17点钟,输出时间到指定文件内
计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务
删除已经设置的任务
显示已经设置的任务内容
设置开机启动
crontab相关命令练习
安装crontab:
yum install crontabs
启动服务
关闭服务
重启服务
查看crontab服务状态:
加入开机自动启动:
chkconfig –level 35 crond on
crontab -e修改crontab文件
列出crontab文件,可以用 crontab -l
5.实验思考题
- 进程和程序有何区别?
进程是一个动态的概念,而程序是一个静态的概念,程序是指令的有序集合,无执行含义,进程则强调执行的过程;进程具有并行特征(独立性,异步性),程序没有;不同的进程可以包含同一程序,同一程序在执行中也可以产生多个进程。它们的本质区别就是进程是动态的,而程序则是静态的。
- 谈谈你对fork()函数的认识。
fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。
它不需要参数并返回一个整数值。下面是fork()返回的不同值。
负值:创建子进程失败。
零:返回到新创建的子进程。
正值:返回父进程或调用者。该值包含新创建的子进程的进程ID
6.实验心得体会
实验5:进程管理【nyist】相关推荐
- linux进程管理命令实验,实验2Linux进程管理.doc
实验2Linux进程管理 实验2 Linux进程管理 实验目的 1.加深对进程概念的理解,明确进程和程序的区别 2.进一步认识并发执行的实质 3.分析进程争用资源的现象,学习解决进程互斥的方法 实验性 ...
- 操作系统实验一 Linux基本操作|实验二 进程管理
由于当时没存代码,只有实验文档代码截图,文末也可直接获取实验文档. 操作系统实验 目录 实验一 Linux基本操作 实验二进程管理 实验一 Linux基本操作 1实验目的 1.熟悉在Linux操作系统 ...
- 《操作系统》实验报告——进程管理
理论知识 Linux--进程管理 1.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执行的实质. (3)分析进程争用资源的现象,学习解决进程互斥的方法. 2.实验预 ...
- OS实验:进程管理与死锁
进程管理与死锁 一. 实验目的 二. 实验内容 三. 实验过程 3.1 在Linux 下创建一对父子进程 让父进程提前结束 让父进程后结束 3.2 在Linux下创建两个线程A和B,循环输出数据或字符 ...
- 【操作系统实验】实验二 进程管理
进程管理 实验2-1 使用fork创建进程 代码 实验2-2 使用exec替换子进程程序 代码 实验2-3 分析进程的父进程 代码 实验2-4 共享存储区机制进程通信 代码 实验2-5 消息队列实现进 ...
- Linux实验心得——进程管理
设计一 进程管理 一.实验目的 1. 理解Linux 系统中进程通信的基本原理. 2. 加深对进程概念的理解,明确进程与程序的区别. 3. 掌握fork().fockf().pipe(fd)等函数的 ...
- 实验五 进程管理命令
1.实验目的 (1)了解如何监视系统运行状态 (2)掌握查看.删除进程的正确方法 (3)掌握命令在后台运行的用法 (4)掌握进程手工.调度启动的方法 2.常用命令 who 查看当前在线用户 top 监 ...
- 操作系统实验二 进程管理
进程管理 一.实验目的 1. 理解进程的概念,明确进程和程序的区别. 2. 理解并发执行的实质. 3. 掌握进程的创建.睡眠.撤销等进程控制方法. 二.实验内容与基本要求 用C语言编写程序,模拟实现创 ...
- 操作系统——实验二 进程管理
1.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执行的实质. (3)分析进程竞争资源现象,学习解决进程互斥的方法. 2.实验预备内容 (1)阅读Linux的sch ...
- 实验1 进程管理实验-计算机操作系统
在分析给定进程创建源代码基础上,结合可能使用的进程调度算法,完善PCB结构 编写程序实现进程撤销功能,并与进程创建程序构成一个进程管理程序,模拟实现进程的管理功能 进行动态的进程创建.撤销等测试. 按 ...
最新文章
- C ++基本输入/输出
- 洛谷—— P1118 [USACO06FEB]数字三角形Backward Digit Su…
- usermod命令,用户密码管理和mkpasswd命令
- 1080 线段树练习
- sql server2005 常用语句
- 用mysql做文本挖掘_手把手教你做文本挖掘
- Shell脚本的学习笔记一:变量
- fastd java下载_FastReport VCL报表控件
- java 同步块的锁是什么,java – 同步块 – 锁定多个对象
- 参考文献中杂志名字问题
- Jquery - jquery 插件,jQuery.Switchable
- 【英语学习】【Level 08】U02 Movie Time L4 From the page to the big screen
- Python-网站页面代码获取
- Ubuntu ibus 输入法之Skype不能输入中文
- python2.x和python3.x共存在windows
- java程序片的三种元素符号是什么_JAVA试题及答案(精致)
- LINUX下载编译libsrtp-1.5.0
- 控制~李雅普诺夫稳定性
- http接口开发与调用案例
- 三菱伺服驱动器MR-J2S 70A伺服驱动器电源驱动板图纸