Linux实验报告9-进程管理

目录

一:实验目的

二:实验内容

(1)列出当前系统中的所有进程,如何观察进程的优先级?

(2)查看当前终端运行的 bash 进程的 PID,在当前终端启动 vim 编辑器并让其在后台执行,然后列出在当前终端中执行的进程的家族树。 

(3)请自行挂载U盘或光盘,然后列出与该设备关联的所有进程。 

 (4)启动top命令后暂停对应进程的执行,然后查看该进程的PID,最后通过kill命令发送信号让该进程终止执行。

(5)利用 nice 程序启动3 个vim 程序,设置它们的谦让度分别为5、10、15,使用ps 命令观察这3个vim 程序的优先级设置结果。 

(6)请通过ps命令指出当前系统中的一些守护进程,列出它们的 PID 以及谦让度。 

(7)查看守护进程 sshd 的当前状态,检査 sshd 服务在第3、5 运行级下是否设置为启动。 

(8)参考综合实训案例11.1和案例11.2,利用案例所提供的process.sh脚本,启动3个进程并分别设置它们的谦让度为-15、0和15,运行一段时间后观察这3个进程在累计占用CPU时间(TIME+)及占用CPU比率(%CPU)上的差异以及系统的平均负载的变化,然后暂停上述3个进程的执行,重新设置它们的谦让度为-5、0和5,再次在运行一段时间后继续观察它们竞争 CPU的表现。 


一:实验目的

(1)了解/proc 文件系统的基本内容。

(2)查看进程状态及进程家族树。

(3)查看进程打开的文件。

(4)向进程发送信号以控制进程。

(5)调整进程优先级。

(6)了解典型守护进程及其服务的内容。

(7)启动或关闭守护进程。

二:实验内容

(1)列出当前系统中的所有进程,如何观察进程的优先级?

如上图所示,PRI字段即为优先级。 

(2)查看当前终端运行的 bash 进程的 PID,在当前终端启动 vim 编辑器并让其在后台执行,然后列出在当前终端中执行的进程的家族树。 

(3)请自行挂载U盘或光盘,然后列出与该设备关联的所有进程。 

 

 (4)启动top命令后暂停对应进程的执行,然后查看该进程的PID,最后通过kill命令发送信号让该进程终止执行。

(5)利用 nice 程序启动3 个vim 程序,设置它们的谦让度分别为5、10、15,使用ps 命令观察这3个vim 程序的优先级设置结果。 

(6)请通过ps命令指出当前系统中的一些守护进程,列出它们的 PID 以及谦让度。 

守护进程“sshd”的PID为1066,谦让度为0

(7)查看守护进程 sshd 的当前状态,检査 sshd 服务在第3、5 运行级下是否设置为启动。 

(8)参考综合实训案例11.1和案例11.2,利用案例所提供的process.sh脚本,启动3个进程并分别设置它们的谦让度为-15、0和15,运行一段时间后观察这3个进程在累计占用CPU时间(TIME+)及占用CPU比率(%CPU)上的差异以及系统的平均负载的变化,然后暂停上述3个进程的执行,重新设置它们的谦让度为-5、0和5,再次在运行一段时间后继续观察它们竞争 CPU的表现。 

从累计占用CPU时间(TIME+)、占用CPU比率(%CPU)和系统平均负载的变化(load average)三个角度来看,随着谦让度的增大,TIME+、%CPU和load average逐渐减小,即谦让度为“-15”的进程在竞争中优于谦让度为“0”的进程,谦让度为“0”的进程在竞争中优于谦让度为“15”的进程。 

 

 

与修改谦让度之前相似,从累计占用CPU时间(TIME+)、占用CPU比率(%CPU)和系统平均负载的变化(load average)三个角度来看,随着谦让度的增大,TIME+、%CPU和load average逐渐减小,即谦让度为“-5”的进程在竞争中优于谦让度为“0”的进程,谦让度为“0”的进程在竞争中优于谦让度为“5”的进程。 

(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
发出的红包

打赏作者

厂里英才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值