实验四linux操作系统实验报告(1),操作系统实验报告

一. 实验目的及实验环境

(一) 实验环境

Linux 操作系统

(二)实验目的

实验1 掌握Linux基本命令 和开发环境

掌握常用的Linux shell命令;

掌握编辑环境VIM;

掌握编译环境gcc及跟踪调试工具gdb。

实验2 进程

通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。

实验3 线程

通过观察、分析实验现象,深入理解线程及线程在调度执行和内存空间 等方面的特点,并掌握线程与进程的区别。掌握POSIX 规范中 pthread_create() 函数的功能和使用方法。

实验4 互斥

通过观察、分析实验现象,深入理解理解互斥锁的原理及特点掌握在POSIX 规范中的互斥函数的功能及使用方法。

二.实验内容

实验2

1.你最初1认为运行结果会怎么样?

会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。

2.实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。

实际的结果跟预期差不多,当输入20时,程序会自动判断,大于10就以10来创建进程。随机输出0~9号进程,sleep(SLEEP_INTERVAL),循环输出,输入数字键,则会杀死该数字对应的进程,直到输入q退出循环,然后杀死本组所有进程。

分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储在proc_number,然后调用死循环函数do_something(),输出该进程的代号proc_number; 当输入数字键时,主进程会执行kill(pid[ch-'0'],SIGTERM),从而杀死(ch - ’0’)号进程。当输入q时循环退出,kill(0,SIGTERM),杀死本组所有进程。程序退出。

3.proc_number这个全局变量在各个子进程里的值相同吗?为什么?

proc_number这个全局变量在各个子进程里的值相同,因为子进程相互独立资源互不影响。

4.kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?

2次;第一次是杀死该进程号pid[ch-’0’],执行后接下来的结果中不会有该进程号,打开另一个终端,使用命令ps aux | grep process查看进程状态,子进程先于父进程退出,则被杀死的进程为僵死状态,加了行代码wait(&pid[ch-'0']),就会使该子进程真正结束。

第二次是杀死本组所有进程。即主进程以及它创建的所有子进程。执行后程序退出,进程结束。

5.使用kill 命令可以在进程的外部杀死进程。进程怎样能主动退出?这两种退出方式哪种更好一些?

进程在main函数中return,或调用exit()函数都可以正常退出。 而使

用kill命令则是异常退出。当然是正常退出比较好;若在子进程退出前 使用kill命令杀死其父进程,系统会让init进程接管子进程。当用kill 命令使得子进程先于父进程退出时,而父进程又没有调用wait函数等待 子进程结束,子进程处于僵死状态,并且会一直保持下去࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值