操作系统实验二 进程创建

直接cv的实验报告,手机端看着有问题,电脑端适配。

百年传承的实验,看不懂题意就对啦

vim写C代码的时候,记得先insetr键,Esc键后:wq保存。

更改后记得gcc重新编译。

代码显示异常,看评论区。

最后一题是在新终端ps

本文参考郭大侠的实验二:

实验二 进程创建_Re:从零开始的代码生活的博客-CSDN博客

《操作系统》实验报告

姓名

Rhyme_7

学号

1008611

实验序号

实验二

实验名称

实验二进程创建

实验目的

1.加深对进程概念的理解,明确进程和程序的区别。

2.掌握进程的创建方法

实验内容

实验题目(1)

ps命令的使用

实验代码、实验过程(界面方式下的抓图)、实验结果(抓图)

(1)显示所有进程,找出使用当前进程的进程ID号,查看其状态。

ps -aux

当前进程ID号如下图,为5350

(2)列出目前所有面向用户的进程。(进程内可省略)

ps -ef

(3)显示所有自己所在用户的进程,并以长格式输出。

ps -U 用户名 -l

(4)用面向任务的格式显示个人用户中bash命令中的所有实例;并查看其父进程的详细信息。

ps -l|grep bash

Cat /proc/这里填PID/status

实验心得(遇到什么问题,如何解决)

不太理解题目中的一些要求,例如面向任务。询问室友后得知。

实验题目(2)

进程的创建

实验代码、实验过程(界面方式下的抓图)、实验结果(抓图)

(1)编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。

#include <stdio.h>
#include <unistd.h>
int main(){
int p1,p2;
while((p1=fork())==-1);        /*创建子进程p1*/
if(p1==0) putchar('b');
else
{
while((p2=fork())==-1);   /*创建子进程p2*/
if(p2==0) putchar('c');
else  putchar('a');
}
return 0;
}

问题1:该程序的运行结果为何?多次运行后结果是否相同,为什么?

多次运行的结果不相同。因为没有同步措施,父进程和两个子进程的输出具有随机性。

问题2:修改该程序,使之在打印结果的同时标出是由哪个程序运行的出来的。(利用getpid()函数)

(2)进程的父进程和子进程

编写一段程序,使用系统调用fork()创建一个子进程。让子进程和父进程并发同时在每个进程中显示其子进程与父进程的PID号。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
pid_t pid;
printf("before calling fork,calling process pid = %d\n",getpid());
pid=fork();
if(pid==-1)         /*创建失败*/
{
printf("fork fail!\n");
exit(1);}               /*表示异常退出.这个1是返回给操作系统的*/
if(pid==0){
printf("this is child process and child's pid = %d,parent'spid %d\n",getpid(),getppid());
    }
if(pid>0){
//sleep(1);    /*表示睡眠1秒*/
printf("this is parent process and pid = %d ,child's pid = %d\n",getpid(),pid);
    }
return 0;
exit(0);                        /*表示正常退出*/
}

分析并运行该程序回答如下问题,将结果与分析写在实验报告中。

问题1:程序中红色部分的作用可以让执行该语句的进程等待一秒钟后继续执行,当不添加改语句时程序的运行结果是什么?为什么?

不添加sleep(1),程序不会等待,不会将CPU给其他线程

问题2:添加sleep(1)语句后程序的运行结果是什么?与不加该语句有何区别?为什么?

加上sleep(1)后,程序会等待1秒,将CPU让给其他线程,但是不会释放锁,因此sleep(1)后自动恢复

问题3:通过PS命令查看各个程序的状态,并分析。

将sleep(1)改为sleep(10)

运行程序

10s内在新终端 ps

10后再ps

第一次ps命令显示有3个名字中含os2-2的程序,第一行状态为S+,表明当前程序正在睡眠,但可被某些讯号唤醒;第二行状态为Z+,表示该程序应该已经终止;第三行状态为S+,表明当前程序正在睡眠。

第二次PS命令显示有1个名字中含有os2-2的程序,状态为S+,可以看出,这个进程和第一次ps命令的第三行是同一个名字,这行的意思是我们查询的grep命令本身。

实验心得(遇到什么问题,如何解决)

猜你喜欢

转载自blog.csdn.net/qq_54499870/article/details/127539192
今日推荐