操作系统实验二:进程控制

本文详细介绍了Linux系统中进程控制的实验,涉及fork()创建子进程,exec()替换子进程执行vi编辑器,以及进程的监控与管理。通过ps命令、kill信号和exit()系统调用,分析了进程状态变化,探讨了进程退出的不同方式及其影响。
摘要由CSDN通过智能技术生成

实验二:进程控制

在Linux系统中的实现
对进程概念深入了解,学习使用fork(),execl(),exit()等函数,ps,pstree,kill,grep,top等Linux命令

Task1

打开一个vi进程。通过ps命令以及选择合适的参数,只显示名字为vi的进程。寻找vi进程的父进程,直到init进程为止。记录过程中所有进程的ID和父进程ID。将得到的进程树和由pstree命令的得到的进程树进行比较。

ps 命令

a 显示所有进程

-a 显示同一终端下的所有程序

-A 显示所有进程

c 显示进程的真实名称

-N 反向选择

-e 等于“-A”

e 显示环境变量

f 显示程序间的关系

-H 显示树状结构

r 显示当前终端的进程

T 显示当前终端的所有程序

u 指定用户的所有进程

-au 显示较详细的资讯

-aux 显示所有包含其他使用者的行程

-C<命令> 列出指定命令的状况

–lines<行数> 每页显示的行数

–width<字符数> 每页显示的字符数

–help 显示帮助信息

–version 显示版本显示

在终端输入命令vi打开一个文本编辑器如下图
在这里插入图片描述
打开另一终端,使用ps -A命令来查看当前全部进程
在这里插入图片描述
在这里插入图片描述可观察到vi的进程号为1752 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190324004924372.png
使用ps -ef|grep +pid 来找到进程号为1752 再依次找到父进程后再次使用上述命令,如ps -ef|grep +ppid
即此处的1742

在这里插入图片描述
在这里插入图片描述
故有进程树
1–1154–1731–1742–1752

使用pstree指令
在这里插入图片描述
在这里插入图片描述

查看发现进程树结构是一样的

Task 2

编写程序,首先使用fork系统调用,创建子进程。在父进程中继续执行空循环操作;在子进程中调用exec打开vi编辑器。然后在另外一个终端中,通过ps –Al命令、ps aux或者top等命令,查看vi进程及其父进程的运行状态,理解每个参数所表达的意义。选择合适的命令参数,对所有进程按照cpu占用率排序。

fork系统调用

fork系统调用

#include <sys/types.h>
#include <unistd.h>
pid_t fork (void);
成功调用fork()会创建一个新的进程,它与调用fork()的进程大致相同。发生错误时,fork()返回-1,并设置errno值。
例:
pid_t pid;
pid = fork ();
if (pid > 0)
printf (”I am the parent of pid=%d!\n”, pid);
else if (!pid)
printf (”I am the baby!\n”);
else if (pid == -1)
perror (”fork”);
注意:fork调用的奇妙之处在于,它仅仅被调用了一次,却能够返回两次,并可能有三种不同的返回值。
在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程一个是父进程。在子进程中,fork函数返回0,在父进程中fork函数返回新创建的子进程的进程ID,我们可以通过fork返回的值来判断当前是子进程还是父进程。

exec系统调用

**#include <unistd.h>
int execl (const char path, const char arg,…);
execl()将path所指路径的映像载入内存,arg是它的第一个参数。参数可变长。参数列表必须以NULL结尾。
通常execl()不会返回。成功的调用会以跳到新的程序入口点作为结束。发生错误时,execl()返回-1,并设置errno值。
例 编辑/home/kidd/hooks.txt:
int ret;
ret = execl (”/bin/vi”, ”vi”,”/home/kidd/hooks.txt”, NULL);
if (ret == -1)
perror (”execl”);

在这里插入图片描述

如果fork返回值是0,说明在子进程中,调用execl函数&

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值