计算机实验进程管理与虚拟机,虚拟机VMware进程控制实验.docx

虚拟机VMware进程控制实验

实验6:进程控制操作

1、实验目的

1、了解进程的概念;

2、熟悉Linux的前台与后台进程控制操作;

3、掌握利用进程监控工具来维护系统的正常运行;

2、实验内容

1、Linux的前台与后台进程控制操作;

2、系统监视器(system monitor)的使用和系统维护;

3、实验操作

在Linux的GUI模式下,点击:“主菜单/系统工具/终端”(system/terminal),进入终端方式,输入命令操作:

1、进程的前台工作方式

操作步骤:

① yes ok ←┘

终端窗口显示__连续打印ok____,此时键盘能否输入其它命令___不能____,为什么?

答:因为前台正在运行yes?ok,不能接收其它命令。yes命令在命令行中输出指定的字符串,直到yes进程被杀死。不带任何参数输入yes命令默认的字符串就是y。按Ctr+C可以结束。

② 按键:Ctrl+Z,暂停一个前台进程的运行,并转为挂起进程。

③ jobs ←┘ 记录下看到的结果显示前台进程已暂停、转为挂起进程。

(jobs 查看后台运行的进程?)

④ fg %1 ←┘ 作用:把挂起进程转为前台进程执行;

( fg %n 让后台运行的进程n到前台来?)

⑤ 再按键:Ctrl+Z 作用与②相同;

⑥ jobs ←┘ 记录下看到的结果__前台进程转为后台挂起进程______。

⑦ bg %1 ←┘ 作用:重新运行挂起进程,但以后台方式运行;

(bg %n 让进程n到后台?运行?)?

⑧ 此时能否再按键:Ctrl+Z暂停一个后台进程的运行?_不能_____,

后台进程的终止:方法一:通过jobs命令查看job号(假设为num),然后执行kill %num?方法二:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid?

(ctrl + z,可以将一个正在前台执行的命令放到后台,并且暂停,不能暂停后台进程)

键盘能否输入其它命令___可以___,为什么?

答:因为现在前台没有运行的进程,等待用户输入命令。

⑨ 用鼠标点击,关闭终端窗口。

2、进程的后台工作方式

除上面把前台进程转到后台进程的过程外,一般在shell提示符下,输入的命令后加上&,即以后台方式运行命令。

再次进入终端方式。

操作:① xclock & ←┘ 后台进程1,记录其时钟的时间__16:35_____

xcalc & ←┘ 后台进程2

find / -name ?*.jpg‘ –print > templist & ←┘ 后台进程3

② jobs ←┘ 有几个后台进程:__2______,记录显示结果:

ps ←┘ 记录下看到的结果:

③ fg %1 ←┘ 将时钟进程转到前台运行。

④ 按键:Ctrl+Z, 将时钟进程挂起,记录时钟的时间_________。

(挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程)

jobs ←┘ 观察显示结果:时钟进程已经转挂起进程,后台运行程序里没有时钟进程_。

回顾上述操作,经过二~三分钟后,看图形时钟有走动吗?___没有____。

⑤ bg %1 ←┘

将挂起的时钟进程转到后运行,现在再观察时钟是否会有变化,为什么?

答:时钟进程转后台运行后,时钟有走动,回到正常时间。

jobs ←┘

kill %2 ←┘ 杀死计算器进程,看计算器是否消失____会消失___。

⑥ ps ←┘

观察屏幕显示,记录时钟(xclock)进程的进程号pid=____6000______。

⑦ kill ←┘ pid为xclock的进程号,作用______________。

试比较与上述步骤⑤中的kill命令的区别。

⑧ ls –l ←┘ 是否有templist文件? ____有____。

⑨ rm templist ←┘ 删除临时文件。

⑩ xclock & ←┘

3、Linux的GUI下进程控制和系统维护

操作步骤:①点击“主菜单/系统工具/系统监视器”(system/system monitor);

②查看标签页“进程列表”(Processes),注意各进程的状态:

进程名 用户 内存 %CPU ID

在各项目旁有“▼”或“▲”,表示降序或升序排列,点击一下,看看有什么变化。

③点击“进程列表”下的“查看”中的“活动的进程”,作如下记录:

进程名 用户 内存 %CPU ID

观察一会儿,看是否会跳出一些其它的活动进程___是___,并马上会消失吗?____是_______,这是进程的什么状态变化?_____前后台变化______________。

④进入“终端方式”

键入命令:yes test process ←┘

切换

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1)进程的软中断通信 #include #include #include #include int wait_flag; void stop(); main( ) { int pid1, pid2; // 定义两个进程号变量 signal(2,stop); // 或者 signal (14,stop); while((pid1 = fork( )) == -1); // 若创建子进程1不成功,则空循环 if(pid1 > 0) { // 子进程创建成功,pid1为进程号 while((pid2 = fork( )) == -1); // 创建子进程2 if(pid2 > 0) { wait_flag = 1; //sleep(1); // 父进程等待5秒 kill(pid1,SIGUSR1); // 杀死进程1 kill(pid2,SIGUSR2); // 杀死进程2 wait(0); wait(0); printf("\n Parent process is killed !!\n"); exit(0); // 父进程结束 } else { wait_flag = 1; signal(SIGUSR2,stop); // 等待进程2被杀死的中断号17 printf("\n Child process 2 is killed by parent !!\n"); exit(0); } } else { wait_flag = 1; signal(SIGUSR1,stop); // 等待进程1被杀死的中断号16 printf("\n Child process 1 is killed by parent !!\n"); exit(0); } } void stop() { wait_flag = 0; } (2)进程的管道通信 #include #include #include int pid1,pid2; // 定义两个进程变量 main( ) { int fd[2]; char OutPipe[100],InPipe[100]; // 定义两个字符数组 pipe(fd); // 创建管道 while((pid1 = fork( )) == -1); // 如果进程1创建不成功,则空循环 if(pid1 == 0) { lockf(fd[1],1,0); // 锁定管道 sprintf(OutPipe,"\n Child process 1 is sending message!\n"); write(fd[1],OutPipe,50); // 向管道写入数据 sleep(5); // 等待读进程读出数据 lockf(fd[1],0,0); // 解除管道的锁定 exit(0); // 结束进程1 } else { while((pid2 = fork()) == -1); // 若进程2创建不成功,则空循环 if(pid2 == 0) { lockf(fd[1],1,0); sprintf(OutPipe,"\n Child process 2 is sending message!\n"); write(fd[1],OutPipe,50); sleep(5); lockf(fd[1],0,0); exit(0); } else { wait(0); // 等待子进程1 结束 read(fd[0],InPipe,50); // 从管道中读出数据 printf("%s\n",InPipe); // 显示读出的数据 wait(0); // 等待子进程2 结束 read(fd[0],InPipe,50); printf("%s\n",InPipe); exit(0); // 父进程结束 } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值