操作系统lab2实验报告

lab2实验报告

一、实验目的

1.加深对进程概念的理解,明确进程和程序的区别。
2.掌握Linux系统中的进程创建,管理和删除等操作。
3.熟悉使用Linux下的命令和工具,如man, find, grep, whereis, ps, pgrep, kill, ptree, top, vim, gcc,gdb, 管道|等。

二、涉及的基础知识

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系统调用

#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”);

三、实验过程及结果

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

(1)使用ps命令查找vi的进程树

先进行一个vi进程
在这里插入图片描述
输入 ps -ef
找到vi进程的进程号
在这里插入图片描述
在这里插入图片描述
由下面两幅图可以寻找到进程号为2291的vi进程,通过寻找其父进程可以找到进程树 2291→1964→1957→1349→1332→919→1
在这里插入图片描述
在这里插入图片描述

(2)使用pstree命令查询vi的进程树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过对比,我们可以发现两次得到的进程树是一样的

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

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(){
   
int pid;
pid=fork();
switch(pid){
   
case -1
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值