计算机操作系统实验进程观测,计算机操作系统实验之_进程观测_实验报告

南阳理工学院计算机操作系统实验之

课程名称:

计算机操作系统

实验学期:

2011-2012第二学期

实验目的和要求

(1)了解在Linux操作系统中进程的特点和表现形式 (2)掌握Linux查看进程的方式与方法

(3)在一个进程中创建另一个进程的方法

(4)掌握父进程和子进程的关系和fork的用法

实验内容与分析设计

实验内容:

(1)编写一个简单的程序,使用ps或top工具观察该进程的的ID号,并使用kill工具终止进程运行。

(2)编写一个程序,使用fork函数生成一个子进程,并使用相关工具观察进程状态。

实验步骤:

(1)

#include int main()

{

//设计一个循环,使其反复运行,方便观察

while(1)

{

printf("I am the first process!\n");

}

return 0;

}

文件名命名为process1.c,使用gcc process1.c -o process编译该程序。运行该程序,打开其它一个终端

窗口,输入命令top,观察名称为process1的进程,记录各项数据(包括进程号)。使用"kill 进程号" 直接杀死该进程。观察进程是否消失?

需要记录的数据:进程状态中的id,内存使用和CPU占有率。由于该进程一直处于循环中,思考id、内存

使用和cpu占有率哪一个因素和循环

关系密切?如何避免,请给出合理的建议。这是否说明CPU也是操作系统中的一个重要资源?

(2)

//process2.c

#include #include #include int main()

{

int i;

if ( fork() == 0 )

{

/* 子进程程序 */

for ( i = 1; i <1000; i ++ )

printf("This is child process\n");

}

else

{

/* 父进程程序*/

for ( i = 1; i <1000; i ++ )

printf("This is process process\n");

}

}

请保存为process2.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释?

若将上述实例(2),改写为:

//process4.c

#include #include #include int main()

{

int i;

if ( fork() == 0 )

{

/* 子进程程序 */

for ( ;; )

printf("This is child process\n");

}

else

{

/* 父进程程序*/

for ( i=1;i<1000;i++ )

printf("This is process process\n");

}

}

请保存为process4.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释?

若将将实例(2)改为:

//process3cc

#include #include #include int main()

{

int i;

if ( fork() == 0 )

{

/* 子进程程序 */

for ( ;; )

printf("This is child process\n");

}

else

{

/* 父进程程序*/

for ( ;; )

printf("This is process process\n");

}

}

请保存为process3.c,编译运行,写出你观察到的输出结果,能否对输出的现象做一个合理的解释?

实验步骤和调试过程:

统一执行一下命令

vim process*.c(编辑源文件)

gcc process*.c -o process*(编译)

./process(运行程序)

top(查看进程)

kill -9 进程号(结束进程)

实验结果:

(1)process.c:    程序无限次输出 I am the first process!直到输入“kill 进程号”才结束 (2)process2.c:  父进程、子进程各输出1000,且输出次序不一

(3)process4.c(process2.c更改后的版本):父进程执行1000次,子进程不确定,且顺序不确定

(4)父进程子进程打印顺序不确定,可见父进程和子进程各独立执行。父进程子进程均无限次输出,知道输入“kill -9 进程号”才终止

疑难小结 (1)、最后一个程序peocess3.c,运行后,kill 进程号无法结束进程,只有kill 进程号-9后才能终止进程

(2)、父子进程打印次序无规律,说明父子进程的进行是无序的随机的。

主要算法和程序清单

//process1.c

#include int main()

{

//设计一个循环,使其反复运行,方便观察

while(1)

{

printf("I am the first process!\n");

}

return 0;

}

//process2.c

#include #include #include int main()

{

int i;

if ( fork() == 0 )

{

/* 子进程程序 */

for ( i = 1; i <1000; i ++ )

printf("This is child process\n");

}

else

{

/* 父进程程序*/

for ( i = 1; i <1000; i ++ )

printf("This is process process\n");

}

}

//process4.c

#include #include #include int main()

{

int i;

if ( fork() == 0 )

{

/* 子进程程序 */

for ( ;; )

printf("This is child process\n");

}

else

{

/* 父进程程序*/

for ( i=1;i<1000;i++ )

printf("This is process process\n");

}

}

//process3.c

#include #include #include int main()

{

int i;

if ( fork() == 0 )

{

/* 子进程程序 */

for ( ;; )

printf("This is child process\n");

}

else

{

/* 父进程程序*/

for ( ;; )

printf("This is process process\n");

}

}

参考书目

西安电子科技大学出版社 《计算机操作系统(第 三 版)》汤小丹 、梁红兵、哲凤屏、 汤子瀛 著

实验源码以及编译好的程序下载地址点击打开链接

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值