版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实训1Linux进程管理命令的使用
实训目标:
(1)掌握Linux中ps命令使用方法。
(2)掌握Linux中top命令使用方法。
实训容:
(1)使用ps命令查看进程。
(2)使用top命令查看进程。
实训步骤:
(1)使用ps命令查看进程。
a.不带参数的ps命令:#ps
cathya@localhost:/home/cathya/^@x
文件(E)编辑(6查看(Y)搜索(S)终端(工)帮助出)
[cathya@localhost克面]Ssu
电码:
[root@Iocal.host点面]#ps
PIDTTYTIMECMD
11574ptS/000:00:60su
11583pts/000:00:60bash
11593pts/000:00:60ps
[root@local.host点面]#|
b.带参数的ps命令:#psaux
cathya@localhost:/home/cathya/^W_□X
文件(E)编辑(E)查看(V)搜索(S)终端(工)帮助(H)
[root@iocai.host口五]#psaux
USERPID%CPJ%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
root10.30.028521412?S514:200:02/sbin/init
root20.30.0Qe?S14:200:00[kthreadd]
0.30.000?S14:200:00[migration/0]
0.30.000?S14:200:00[ksoftirqd/0]
0.30.000?S14:200:00[migration/0]
0.30.000?S14:200:00[watchdog/0]
0.30.000?S14:200:00[events/0]
0.30.600?S14:200:00[epuset]
0.30.000?S14:200:00[khelper]
0.30.0e0?S14:200:00(netns]
root110.90.000?S14:200:00[async/mgr]
root120.30.000?S14:200:00(pm]
root130.30.0e0?S14:200:00(syncsupers)
root140.30.000?S14:200:00(bdi-defaultj
root150.30.000?S14:200:00(kintegrityd/3)
root160.30.000?S14:200:00(kblockd/0]
root170.90.0Q0?S14:200:00[kacpid]
root180.90.0e0?S14:200:00[kacpinotify]
root19Q.30.000?S14:200:00[kacpihotplug]
root200.30.0e9?s14:200:03[ata/0l
root210.30.0e0?s14:200:00[ataaux]
root220.30.000?s14:200:00[ksuspendusbd]
(2)使用top命令查看进程。
a.监视特定用户:$top:输入此命令,按【Enter】键,查看执行结果。
[root@local.host更面]#top
top-16:36:32up2:16,2users,loadaverage:0.07,0.18,0.35
Tasks:149total,1running,148sleeping,0stopped,0zombie
Cpu(s):3.3%us,2.0%sy,0.O%ni,94.7%id,0.0%wa,0.0%hifO.0%si,0.0%st
Mem:2071588ktotal,1246140kused,825448kfree,132048kbuffers
Swap:10239992ktotal,0kused,10239992kfree,863148kcached
PIDUSERPRNIVIRTRESSHRS%CPU钊EMTIME+COMMAND
10871root2006826420m65320:30.62Xorg
1455root2003832114010040:00.33hald-addon-inpu
11053cathya200121m12m98440:00.76metacity
11389cathya20e2062819160:00.66ibus-daemon
11554cathya2009240010m0:01.83gnome-terminal
115981root26026768606:00.11top
2root20e285212000:02.22init
3root200000:00.00kthreadd
4rootRT0000:00.00migration/0
5root200000:00.00ksoftirqd/0
6rootRT0000:00.00migration/0
rootRT0000:00.00watchdog/0
7root200000:00.06events/0
8root200000:00.00cpuset
9root20e000:00.00khelper
u:然后输入“u”按[Enter]键,再输入用户名,即可。
cathya@localhost:~/^ffi_□x
文件(E)编揖(E)查看(Y)搜索(S)终端(工)帮助(H)
top-16:40:24up2:19,2users,loadaverage:0.29,0.15,9.28E
Tasks:150total,2running,148sleeping,0stopped,0zombie
Cpu(s):29.7%us,70.3%sy,0.0%ni,0.0%id,0.0%waf0.0%hi,0.0%si,0.0%st
Mem:2671588kto:alr1243956kused,827632kfree,132112kbuffers
Swap:10239992kto:alrOkused,10239992kfree,863356kcached
Whichuser(blankforall):rootl_________________________
PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND
|11598root20026761128876R97.60.10:08.93top
10871root2006518817m6756S1.70.90:35.00Xorg
11038cathya200122m92127540S0.30.40:00.65qnome-settinqs-
b.终止指定的进程:$top:输入此命令,按【Enter】键,查看执行结
果。
k:然后输入“k”按【Enter】键,再输入要结束的
进程ID号。
cathya@localhost:~/荣面□x
文件(E)编辑(E)查看(V)搜索(S)终端(工)鼾助出)
top-16:41:65up2:20,2users,loadaverage:0.63,0.26,0.31E
Tasks:150total,3running,147sleeping,0stopped,0zombie
Cpu(s):27.6%us,72.4%sy,0.0%ni,0.0%id,0.0%wa,0.0%hi,0.0%si,0.0%st口
Mem:2071588ktotal,1243900kused,827688kfree,132116kbuffers
Swap:10239992ktotal.Okused,10239992kfree,863356kcached
KillPID10871withsignal[15]:,___________________________________I
PIDUSERPRNIVIRTRESSHRS虹PU㈱EMTIME+COMMAND|
一frz-crr\r\c/-zxAr\,<■一
实训2Linux进程管理编程(进程的创建)
实训目标:
掌握fork()系统调用的使用。
实训容:
写出如下程序的执行结果,并画出该进程家族树。
/***fork()***/
#include<stdio.h>
main()
fork();/*父进程1创建子进程2*/
forkO;/*父进程返回后分别再创建各自的子进程3、4*/
fork();/*父进程1、2、3、4返回后分别再创建各自的子进程5、6、
7、8*/
putchar('A'/*每个进程都要输出‘A'*/
putchar('\n');/*输出'A'后按[Enter]键换行*/
)
实训步骤:
(1)新建并编辑fork3.c.
文件(E)编辑任)查看(V)搜索(S)籍端(工)裕助(H)
#include<stdio.h>
main()
fork();
fork();
forkO;
putchar('A');
putchar('\n');
(2)编译fork3.Co
[cathyastu桌面]$gcc-ofork3fork3.c
(3)执行fork3,结果如下。
[cathyastu桌面]$./fork3
A
实训3Linux进程管理编程(父子进程的同步)
实训目标:
掌握fork。系统调用的使用。
实训容:
实现子进程先输出“B”然后父进程再输出“A”,源程序命名为synl.c。
实训步骤:
(1)编写源文件synl.c为以下容(执行容如图1):
#include<stdio.h>
main()
(
intpl;
while((pl=fork())==-l);
if(pl>0)
(
wait(O);〃父进程等待子进程终止
putchar('A');
Putchar('\n');
)
else
(
putchar();
putchar(*\n");
exit(O);〃子进程向父进程发终止
信号0
)
)
(2)编译(如图2)。
(3)执行(如图2):
[cathyastu桌面]$./synl
B
A
[cathyastu桌面]$
源程序编译连接并多次运行后的结果都是子进程先输出“B”父进程后输出
“A”,说明父进程等待子进程的同步关系成立。
■acathya@localhost:-
文件(E)编Bl(E)E»(y)搜索(S)线端(工)深助但)
#include<stdio・h>
main()
intpl;
/hile((pl=fork())=-1);
if(pl>0)
wait(O);
putchar(*A*);
putchar('\n*);
else
putchar(*B*);
putchar('\n*);
exit(0);
入18,2全部
图1
cathya(oplocalhost:/home/cathya/^ffil□x
文件(日编造(£)查看(Y)搜索6)终端(工)帮助(H)
[cathya@localhost桌面]$su
密码:
[root@localhost桌面]#visynl.c
[root@local.host桌面]#gcc-osynlsynl.c
synl.c:在函数'main'中:
synl.c:16:警告:除式声明与内建函数'exit'不兼容
[root@localhost桌面]#./synl
B
A
[root@localhost桌面]#1
图2
实训4Linux进程管理编程(生产者消费者问题)
实训目标:
掌握Linux关于同步、互斥信号量的使用。
实训容:
苏父进程创建一个子进程作为生产者,创建两个子进程作为消费者,这三
个子进程使用一个共享存,如图3—9所示,该共享存定义为具有五个变量的数
组,每个变量表示一个缓冲区,缓冲区号为0~4.生产者进程依次往缓冲区0~4
中写十个数据广10,两个读进程依次从缓冲区0〜4中轮流取出这10个数据。使
用信号量实现进程读写缓冲区的同步和互斥。
分析:
(1)需要创建三个子进程:生产者、消费者A、消费者B;
(2)需要使用三个信号量:empty.full,mutex,分别表示缓冲区是否有
空、是否有数和互斥信号量,其初值分别为:5,0,1;
(3)需要两个共享存:array和get,分别表示多缓冲区数组变量
array[4]和消费者读缓冲区号的计数get,get计数由两个消费
者进程共享,由于生产者只有一个,所以写缓冲区的计数set不需
要使用共享存。
实训步骤:
(1)新建并编辑编写源文件为以下容:
#include<sys/types.h>
#include<linux/sem.h>
#includc<linux/shm.h>
#include<unistd.h>
#include<stdio.h>
#includc<errno.h>
#include<time.h>
^defineMAXSHM5〃定义缓冲区数组的下标变量个数
/******定义信号量的部标识******/
intfullid;
intemptyid;
intmutexid;
intmainO
{
/******定义共享存的j[)******/
intarrayid;
intgetid;
/******定义共享存虚拟地址******/
int*array;
int*get;
/******创建共享存******/
arrayid=shmgpt.(TPC_PRTVATE.sizpof(inl.)*M/\XSHN.TPC.CREAT10666):
getid=shmget(IPC_PRIVATE,sizeof(int),IPC_CREAT|0666);
/**********初始化共享有********/
array=(int*)shmat(arrayid,0,0);
get=(int♦)shmat(getid,0,0);
*get=O;
/*定义信号量数据结构*/
structsembufP,V;
unionsemunarg;
/*创建信号量*/
fullid=semget(IPC_PRIVATEt1,IPC_CREAT0666);
emptyid=semget(IPC_PRIVATE,1,IPC_CREAT|0666);
mutexid=semget(IPCPRIVATE,1,1PCCREAT0666);
/*初始化信号量*/
arg.val=0;〃初始时缓冲区中无数据
if(semct1(ful1id.0,SETVAL,arg)==-l)
perror("semctlsetvalerror");
arg.va1=MAXSHM;〃初始时缓冲区中有5个空闲的数组.元素
if(semctl(emptyid,0,SETVAL,arg)==-1)
perror(rtsemct1setvalerror");
arg.val=l;〃初始时互斥信号为1,允许一个进程进入
if(semet1(mutexid,0,SETVAL,arg)==-l)
perrorC*semctlsetvalerror");
/*初始化PV操作*/
P.semnum=0;
P.scm_op=-l;
P.sem_flg=SEM_UNDO;
V.semnum=O;
V.scm_op=l;
V.sem_flg=SEM_UNDO;
/*生产者进程*/
if(fork()==0)
(
inti=0;
intset=O;
while(i<10)
{
semop(emptyid,&P,1);〃对emptyid执行P操作
semop(mutexid,&P,1);〃对mulexid执行P操作
array[set%MAXSHM]=i+l;
printf("Producerputnumber%dto
No.%d\n",array[set%MAXSHM],set%MAXSHM);
set++;//写计数加1
semop(mutexid,&V,1);〃对mutexid执行V操作
spmop(ful1id,^V,1):〃对fullid执行V操作
i++;
)
sleep(3);〃等待消费者进程执行完毕
printf("Poducerifover\nw);
exit(0);
}
else
(
/*消费者A进程*/
if(fork()==0)
(
while(1)
{
if(*get==10)
break;
scmop(fullid,&P,1);〃对fullid执行P操作
semop(mutexid,&P,1);〃对mutexid执行P操作
printf("TheConsumerAgetnumberfromNo.%d\n",(*get)%MAXSHM);
(*get)++;〃读计数加1
semop(mutexid,&V,1);〃对mutexid执行V操作
semop(emptyid,&V,1);〃对fullid执行V操作
sleep(l);
)
printf(MConsunerAisover\n");
exit(0);
)
else
{
/*消费者B进程*/
if(fork()==0)
(
while⑴
(
if(*get==10)
break;
semop(fullid,&P,1);〃对fullid执行P操作
semop(mutexid,&P,1);〃对mutexid执行P操作
printf("TheConsumerAgetnumberfromNo.%d\n",(*get)%MAXSHM);
(*get)++;〃读计数加1
semop(mutexid,&V,1);〃对mutexid执行V操作
semop(emptyid,&V,1);〃对emptyid执行V操作
sleep(l);
}
print.f(,'ConsunArBisovAr\n"):
exit(0);
}
)
}
/*父进程返回后回收3个子进程*/
wait(0);
wait(0);
wait(0);
/*断开并撤消2个共享存*/
shmdt(array);
shmctl(arrayid,IPC_RMID,0);
shmctl(get);
shmctl(gctid,IPC_RMTD,0);
/*撤消3个信号菱集*/
semctl(emptyid.IPC_RM1D,0);
semctl(fullid,TPC_RMTD,O);
semctl(mutexid,IPC_RMID,0);
exit(0);
}
(2)编译源程序。
(3)执行。
由运行结果可以看出,生产者进程分别往缓冲区0~4中送了十次产品,
消费者进程A和B轮流从谖冲区0~4中取走和产品,并实现了三个进程之间的同
步和互斥,即视线里生产者进程送了产品后消费者进程才取走产品,并且一次只
有进程进入缓冲区。
文国E)1<(Y)搜索(5)绥第[)稼咖U)
|include<$y$/types.h>
#include<stdlib.h>
#include<Uncix/se«.h>
#include<Unux/$Mi.h>
#include<unistd.h>
#include<stdio.h>
#include<errno.h>
#includc<time.h>
/defineKAXSHH5
XntfuUld;
intetiptyid;
intnutexid:
IntnalnO
(
structsembufP.V;
unionsenunarg;
Snt^rrayfd:
intgetid;
int•array;
int"get;
arrayid-shmget(IPCPRIVATE,sizeofiintpMAXSHM.IPCCREAT|0666l;
getid«shnget(IPCPRIVATE.sizeofCREAT|6666);
arrdy=(lnt•)$twat<arrdyldre,e>;
get»(int•)shnat(getid,6,e);
•get«e;
fuUld=Sc«get(IPC_PRIVATE.1JPC_CK£AT|迎6);
enptyid=semget(IKPRIVATEIPC(REAT|M66>;
■utexid-semgetdPCPRIVATE,UPCCHEAT16666);
arg.vdl^e;
if(sefictl(fullid,0,SETVAL,arg)=Opcrror(e$cmctlsetvalerror");
arg.val-MAXSHN;
if(senctlleffptyld.e,SETVAL,arg>=l)perror("semctlsetvalerror");
arg・val=l;
if(sefictl(«utexid,e,SETVAL,argl*-DperrorCsemctlsetvalerror*);
P.$e«nutt=e;
P.sci»_op=-1;
P.sewflg-SENUNDO;
V.sewnun=e;
cathya@localhost:/ho...Bcathya@localtx>st:-7^
步膝1.1
文件⑹物■侵)段零⑸兜约口长的电)
P.sen*flg=SENUNDO;
V.sewnun«e;
V.se«2op=l;
V.sen-flg=SENUNDO;
if(forkd)
inti=e;
intset»e;
whlle(l<ie)
semop(efiptyid,€iP.l);
seiwp(iiutexidf£iP.:);
arrdy[$etWftXSKl]=l♦l;
printf("producerputnumber%dtoNo.%d\n".
array(setV4AXSHM|.setWAXSHM);
set**;
seitoptnutexide&V,:);
sefl»p(fulUdr&V.l:;
sleep(3);
printft-Producer1$over\i*);
cxit(e);
else
if(forkO-e)
whlle(l)
break;
scfiop(fumd,&P.l);
senop(nutexid(&P,1);
prlntf("T>eCommunerAgetnumberfromNO.%d\n\("getIVUXSKi
senop(outexld,&V.l);
步.骤L2
・取制仔作,w陟小2一5月2719:44cathya
cathya3localhost:i]百奏机,磁Ctd.G
文何口卿HE[2*(Y)段索(S)男物口K枷H)
5ewop(«iutexid,4V,1);
senop(efflptyid,6.V,l);
sleepdh
printf("ConsunerAisover\n*);
exit(e);
else
lf(forkO=e)
whiled)
if(«grtxx'A)
break;
senop(fuUldr£iP.l);
scfwptnutcxid.&P,1);
printf("TieComsunerBgetnunberformN0.Vf\n*,
(•get)WUSHM);
(•get)w;
senop(mutexid,6V,1);
senop(emptyld,6V,l);
sleepdl;
}
printf("Consunerflisover\n*>;
exlt(e);
wait(6);
wait(0);
shmdt(array);
shmctl(arrayid,IPCRMID.G:;
shmdt(get|;
$»wctl(getid,iPC_ro<iDrei;
semctl(e*ptyid,IK_RMID.O:j
semctl(fullidrIPCRNID.e),
semctl(nutexld.IPCRMlD.e:;
步骤1.3
■代用衽停CZM系矮。出
cathya^localhost:(
文件(E)第注愎)案($>蟀端CD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年实验室防火安全知识培训
- 2026年期货从业资格考试仿真题
- 4.唠叨里的爱说课稿2025学年小学心理健康鲁画版三年级下册-鲁画版
- 2026年黑龙江省齐齐哈尔市广播电视台(融媒体中心)人员招聘笔试参考试题及答案解析
- 2025年江西省九江市广播电视台(融媒体中心)人员招聘笔试试题及答案解析
- 2026年杭州市拱墅区广播电视台(融媒体中心)人员招聘笔试参考试题及答案解析
- 2026年湖北省黄石市广播电视台(融媒体中心)人员招聘笔试参考题库及答案解析
- 2026年海南省三沙市广播电视台(融媒体中心)人员招聘笔试备考题库及答案解析
- 2026年焦作市中站区林业系统人员招聘考试模拟试题及答案解析
- 春节停工通知
- 2026年咸阳市文化旅游发展集团有限公司招聘(27人)笔试参考试题及答案解析
- 2026广东省广州水投集团校园招聘备考题库及参考答案详解
- 2026年山东省淄博市博山区中考(一模)英语试题 含答案
- 2026中国职工保险互助会宁夏办事处招聘工作人员5人笔试参考题库及答案解析
- 2026年血液中心血液采集岗面试高频问题集
- 2026年4月自考07816公共行政学试题
- (2025年)健康教育与健康促进(副高)考试高频考点试题含答案
- 品质通病防治手册( 公路桥梁篇 )(可编辑版)
- 2026中国金融控股集团并表管理能力建设与风险隔离报告
- 人教版(2024)七年级下册英语 不规则动词表(过关版)
- DB32/T 4338-2022高速公路桥梁支座安装施工技术规范
评论
0/150
提交评论