Linux进程编程基础-简单的七个测试认识linux进程

简单的七个测试认识linux进程

Test1:linux进程创建

运行代码及结果见下图3-1、3-2。
1
图 3-1 运行代码
2
图 3-2 运行结果
从结果可以看出,系统分配的进程号PID为3345,父进程PPID为3250,用的函数为getpid(),getppid()。成功执行。

Test2:创建一个新进程,新进程的进程号和原程序的进程号相同

运行代码及结果见下图3-3、3-4。
3
图 3-3 运行代码
4
图 3-4 运行结果
从结果可以看出,利用execve来进行调用vim创建新进程,由于程序代码中最后一个printf未执行可看出代码execve执行成功, execve函数是替换原来的程序代码,但是进程PID不会变,文件描述符不会变,只是程序代码被替换了,所以execve函数后面的语句都不会被执行。执行成功。

Test3:调用ping程序,创建新进程

运行代码及结果见下图3-5、3-6。
5
图 3-5 运行代码
6
图 3-6 运行结果
从结果可以看出,系统分配的进程号为5025,之后调用ping程序,ping www.lupaworld.com,在执行一段时间后使用快捷键ctrl+c。可以看到结果为10 packets transmitted,10 received,0% packet loss,time 9357ms可看出未发生丢包,以及最小值、平均值、最大值、方差值,程序执行成功。

Test4:显示当前目录下的文件信息,并测试网络连通情况

运行代码及结果见下图3-7、3-8。
7
图 3-7 运行代码
8
图 3-8 运行结果
从结果可以看出,返回值为0为子进程,并得到此进程的PID:5185,此进程的父进程号PPID:5184和当前目录下的信息,以及ping程序可以看出网络连接通畅。后面点击crtl+c可以看到返回值为5185为父进程,当前进程号为5184其父进程号为4916。执行成功。

Test5:测试exit(0)、_exit(0)区别

运行代码及结果见下图3-9、3-10。
9
图 3-9 运行代码
10
图 3-10 运行结果
从结果可以看出,exit(0)函数获取缓存后再退出,_exit(0)函数则直接异常退出。这也与我们预备知识中查找到的功能相符,利用构造缓冲成功测试出了它们之间的区别。

Test6:避免子进程成为僵尸进程

运行代码及结果见下图3-11、3-12。
11
图 3-11 运行代码
12
图 3-12 运行结果
13
图 3-13 运行结果
从结果可以看出,首先是父进程创建子进程后20s调用wait()函数,等待子进程退出,回收子进程的资源,这也意味着子进程将会成为僵尸进程5s。运行该程序后,打开终端,查看进程状态,图3-13显示的有一个进程的标志为Z,表示该进程为僵尸进程(Zombie)。当父进程调用wait()函数后,子进程的资源被回收,僵尸进程的标志被去掉了。避免了子进程成为僵尸进程达到了实验目的。

Test7:创建守护进程

运行代码及结果见下图3-14、3-15、3-16。
14-1
14-2
图 3-14 运行代码
15
图 3-15 运行结果
在这里插入图片描述
图3-16 执行流程图
从运行结果图3-15由-1的执行结果可以看出成功生成守护进程,在程序上半段,若child1大于0则直接终结父进程,在进入子进程中先进行创建新的会话,再改变工作目录到“temp”之后通过umask(0)重设文件创建掩码,最终关闭文件描述符,从这五步守护进程即创建成功。在程序后半段,首先判断child2是否为第二子进程若是则向系统日志文件写入文字并暂停10s然后退出,若是第一子进程则进入死循环。图3-16为本程序具体执行流程。

我的心得

本次的实验测试是对linux中进程的应用的实验,其中包含了进程ID号的获取、用三种方式创建新进程、检测网络状况、僵尸进程的预防,以及守护进程的创建等。
首先让我明白了三种方式创建新进程的不同之处,system()函数通过调用shell程序来执行所指向的命令(效率低),相当于先fork(),再execve(),原进程和子进程各自运行,且原进程需要等子进程运行完后再继续,exec系列函数调用时,启动新进程,替换掉当前进程。即程序不会再返回到原进程,除非exec调用失败。fork和exec的替换不同,调用fork函数,可复制一个和父进程一模一样的子进程。执行的代码也完全相同,但子进程有自己的数据空间,环境和文件描述符。还有最后一个查看输出信息时,通过查阅资料我知道了LOG_INFO为一般信息,存放在messages文件中,之后才通过tail命令查询出来。
大家如果发现测试中有不足之处欢迎指出讨论!!谢谢!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值