当前位置:文档之家› 实验一进程创建 Linux实验报告

实验一进程创建 Linux实验报告

实验一进程创建

【实验目的和要求】

1、1.了解进程的概念及意义;

2.了解子进程和父进程;

3.掌握创建进程的方法。

【实验内容】

1、1.子进程和父进程的创建;

2.编写附件中的程序实例;

3.撰写实验报告。

【实验原理】

1、原型:

#include

pid_t fork(void);

在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。fork函数创建子进程的过程为:使用fork函数得到的子进程是父进程的一个复制品,它从父进程继承了进程的地址空间,包括进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端,而子进程所独有的只有它的进程号、资源使用和计时器等。通过这种复制方式创建出子进程后,原有进程和子进程都从函数fork返回,各自继续往下运行,但是原进程的fork返回值与子进程的fork返回值不同,在原进程中,fork返回子进程的pid,而在子进程中,fork返回0,如果fork返回负值,表示创建子进程失败。

子进程和父进程继续执行fork调用之后的指令。子进程是父进程的副本。例如,子进

程获得父进程数据空间、堆和栈的副本。注意,这是子进程所有用的副本。父进程和子进程并不共享这些存储空间部分。父进程和子进程共享正文段。

2、原型:

#include

pid_t vfork(void);

vfork函数的调用序列和返回值与fork相同,但两者的语义不同。vfork函数用于创建一个新进程,而该进程的目的是exec一个新程序。vfork不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec,它在父进程的空间中运行。vfork保证子进程先运行,在它调用exit之后父进程才可能被调度运行,当子进程调用这两个函数中的任意一个时,父进程会恢复运行。

【程序代码】

1、1_fork.c

#include

#include

int var = 10;

int main(int argc,char *argv[])

{

pid_t pid;

int num = 9;

pid = fork();

if(pid<0)//fork函数创建进程失败!

{

perror("fork");

}

if(pid==0)//子进程

{

var++;

num++;

printf("in son process var = %d,num=%d\n",var,num); }

else//父进程

{

sleep(1);

printf("in father process var=%d,num=%d\n",var,num); }

printf("common code area\n");

return 0;

}

2、2_vfork.c

#include

#include

int var = 10;

int main(int argc,char *argv[])

{

pid_t pid;

int num = 9;

pid = vfork();//创建进程

if(pid<0)

{

perror("vfork");

}

if(pid == 0)

{

var++;

num++;

printf("in son process var=%d,num=%d\n",var,num);

_exit(0);

}

else

{

printf("in father process var=%d,num=%d\n",var,num);

}

return 0;

}

【实验步骤】

一、

1、打开终端,输入命令gedit 1_fork.c,在1_fork.c文件中输入1_fork.bmp中的代码;

2、输入命令gcc 1_fork.c -o 1_fork,回车后显示无错误;

3、输入命令:./1_fork运行程序。

二、

1、打开终端,输入命令gedit 2_vfork.c,在2_vfork.c文件中输入2_vfork.bmp中

的代码;

2、输入命令gcc 2_vfork.c -o 2_vfork,回车后显示无错误:

3、输入命令:./2_vfork运行程序。

【实验结果】

1、

从上面可以看到两次的运行结果不一样。我们知道write函数是不带缓存的。因为在fork之前调用write,所以其数据写到标准输出一次。但是,标准I/O库是带缓存的。如果标准输出连到终端设备,则它是行缓存的,否则它是全缓存的。当以交互方式运行该程序时,只得到printf输出的行一次,其原因是标准输出缓存由新行符刷新。但是当将标准输出重新定向到一个文件时,却得到printf输出行两次。其原因是,在fork之前调用了printf一次,当调用fork时,该行数据仍在缓存中,然后在父进程数据空间复制到子进程中时,该缓存数据也被复制到子进程中。于是那时父、子进程各自有了带该行内容的缓存。在exit之前的第二个printf将其数据添加到现存的缓存中。当每个进程终止时,其缓存中的内容被写到相应文件中。

2、

因为我们知道vfork保证子进程先运行,子进程运行结束后,父进程才开始运行。所以,第一次打印的是子进程的打印的信息,可以看到var值变成了11。子进程结束后,父进程运行,父进程首先打印fork调用返回给他pid的值(就是子进程pid)。以上我们可以看出,vfork 创建的子进程和父进程运行的地址空间相同(子进程改变了var 值,父进程中的var值也进行了改变).

【实验体会】

1、由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。

两次返回的区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程

ID。

2、将子进程ID返回给父进程的理由是:因为一个进程的子进程可以多于一个,所有没

有一个函数使一个进程可以获得其所有子进程的进程ID。fork使子进程得到返回值0的理由是:一个进程只会有一个父进程,所以子进程总是可以调用getppid以获得其父进程的进程ID(进程ID 0总是由交换进程使用,所以一个子进程的进程ID不可能为0)。

3、vfork与fork一样都创建一个子进程; vfork和fork之间的另一个区别是:vfork保证

子进程先运行,在它调用exit之后父进程才可能被调度运行。(如果在调用这两个

函数之前子进程依赖于父进程的进一步动作,则会导致死锁)

理工大学Linux实验报告

实验名称实验一Linux操作系统定制安装 实验地点博学楼 实验时间4月16日 网络实验室 一、实验目的和要求 ⑴通过对Linux 操作系统的定制安装,建立对Linux操作系统的初步认识,为后续实验的进行提供基础平台。 ⑵掌握Linux操作系统的虚拟机定制安装。 ⑶熟悉Linux文件目录结构 二、实验内容和原理 实验内容:利用虚拟机软件定制安装Linux操作系统,熟悉安装过程中各个选项的意义。 实验原理:虚拟机可以说是一种软件,也可以说是一种技术,它允许用户在一台主机上虚拟出多台计算机,每台虚拟的计算机都可以有自己的硬件及软件配置。 三、主要仪器设备PC机、VMware Player、Redhat/Ubuntu/Fedora 四、操作方法与实验步骤 ⑴安装VMware Player ⑵在VMware Player当中创建一个新的虚拟机,指定安装包的路径。 ⑶安装定制Redhat Enterprise Linux 5.0 说明: ⑴对软件开发和和网络服务包进行定制。 ⑵选择samba服务、nfs服务、tftp服务、Telnet服务和FTP服务 ⑶关闭系统防火墙、禁用SELinux服务。 ⑷手动设置系统分区。 五、实验数据记录和处理 1、安装Ubuntu

进入界面: 2、选择tftp服务 3、对软件开发和网络服务包进行定制,都选择老的软件开发和老的网络服务器

4、关闭系统防火网 5、禁用SELinux服务 六、实验结果与分析

七、讨论、心得 通过这次实验,在自己电脑的虚拟机上安装好了Ubuntu的镜像文件,并在Ubuntu下写了一些简单的命令,深深地感觉在虚拟机上运行Ubuntu远远要比双系统下方便得多,尤其是在两种不同系统下来回切换。由于电脑上之前就已经安装过虚拟机,所以,实验报告中未对虚拟机的安装加以赘述。 实验名称实验二熟悉Linux系统的基本命令 实验时间4月18日 实验地点博学楼 网络实验室 一、实验目的和要求 ⑴熟悉Linux命令格式 ⑵学会如何获取命令帮助信息 ⑶熟练掌握Linux常用命令 ⑷掌握GCC命令的使用及其常用参数的含义

linux实验报告

中国地质大学江城学院 LINUX操作系统实验报告 姓名 班级学号 指导教师 2011 年5月10日

目录 ?实验一在LINUX下获取帮助、Shell实用功能?实验二文件和目录操作命令 ?实验三 vi编辑器使用、文件显示和处理命令?实验四 LINUX常用操作命令 ?实验五 Shell程序的创建及变量 ?实验六 Shell流程控制语句 ?实验七用户和组群账户管理 ?实验八磁盘和文件系统管理

实验一在LINUX下获取帮助、Shell实用功能 实验目的: 1、掌握字符界面下关机及重启的命令。 2、掌握LINUX下获取帮助信息的命令:man、help。 3、掌握LINUX中Shell的实用功能,命令行自动补全,命令历史记录,命令的排列、替 换与别名,管道及输入输出重定向。 实验内容: 1、使用shutdown命令设定在30分钟之后关闭计算机。 2、使用命令“cat /etc/named.conf”设置为别名named,然后再取消别名。 3、使用echo命令和输出重定向创建文本文件/root/nn,内容是hello,然后再使用追加重定向输入内容为word。 4、使用管道方式分页显示/var目录下的内容。 5、使用cat显示文件/etc/passwd和/etc/shadow,只有正确显示第一个文件时才显示第二个文件。 实验步骤及结果: 1、打开Linux系统的虚拟机。 使用终端,在桌面点击鼠标右键,在菜单中点击新建终端。 在界面中输入“shutdown –h 30”,得到如下结果,完成使用shutdown命令设定在30分钟后关闭计算机。如图: 2、在界面输入“alias named=〝ls –l /etc/named.conf〞”按下Enter键实现文件别名named,再输入“named”命令,按下Enter键可以检验别名是否设置正确同时查看内容。输入“unalias named”可以取消别名的定义,再输入“named”检测别名是否取消。

操作系统实验报告(进程的创建)

实验题目进程的创建小组合作否姓名班级学号 一、实验目的 1、了解进程的创建。 2、了解进程间的调用以及实现。 3、分析进程竞争资源的现象,学习解决互斥的方法。 4、加深对进程概念的理解,认识并发执行的本质。 二.实验环境 Windows 系统的计算机一台,安装了Linux虚拟机 三、实验内容与步骤 1、fork()系统调用的使用例子 程序代码: #include #include #include int glob=3; int main(void) { pid_t pid;int loc=3; printf("before fork();glod=%d,loc=%d.\n",glob,loc); if((pid=fork())<0) { printf("fork() error. \n"); exit(0); } else if(pid==0) { glob++; loc--; printf("child process changes glob and loc: \n"); } else

wait(0); printf("parent process doesn't change the glob and loc:\n"); printf("glob=%d,loc=%d\n",glob,loc); exit(0); } 运行结果: 2、理解vofork()调用: 程序代码: #include #include #include int glob=3; int main(void) { pid_t pid; int loc=3; if((pid=vfork())<0) { printf("vfork() error\n"); exit(0); } else if(pid==0) { glob++; loc--; printf("child process changes the glob and loc\n"); exit(0); } else printf ("parent process doesn't change the glob and loc\n"); printf("glob=%d,val=%d\n",glob,loc);

linux实验报告总结-共10篇

∣inux实验报告总结(共10篇) (Linux实验报告汇总) (一)Shell 编程 一、实验目的: 1)掌握在Linux下的C编程基本方法。 2)掌握shell编程方法。 3)掌握dialog图形化编程方法。 二、实验内容 1、编写能输出“Hello world!”问候语的C程序,并在终端中编译、执行。要求记录所使用的命令及结果。 #include stdio.h main()( printf(Hello world!\n); ) 2、编写一个C程序并设置其在后台执行,其功能是在一段时间后(可自行设置),在屏幕上显示信息:Time for play!,写出相应的程序、命令及结果。 #include stdio.h main()( int time=0; printf(请输入等待时间(单位:s):);

scanf(%d/&time); sleep(time); printf(Time for play!\n); ) 3、编写C程序,求1到100之间整数的阶乘和,并对程序进行 优化。写出程序、命令和结果。 #include stdio.h main() int i; double s = l,sum = 0; for( i= l;i= 100;i++) sum+=s*=i; printf( 1到100之间整数的阶乘和:%f\n,sum); printf( 1到100之间整数的阶乘和:%e\n,sum); } 4、编写C程序,根据键盘输入的半径求圆面积,要求在命令行 周率(P∣=3∙14,PI=3∙14159,PI=3.14159626 等)进行编使用不同的 译,写出程序、命令和结果。 #include stdio.h int main()

实验一进程创建 Linux实验报告

实验一进程创建 【实验目的和要求】 1、1.了解进程的概念及意义; 2.了解子进程和父进程; 3.掌握创建进程的方法。 【实验内容】 1、1.子进程和父进程的创建; 2.编写附件中的程序实例; 3.撰写实验报告。 【实验原理】 1、原型: #include pid_t fork(void); 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。fork函数创建子进程的过程为:使用fork函数得到的子进程是父进程的一个复制品,它从父进程继承了进程的地址空间,包括进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端,而子进程所独有的只有它的进程号、资源使用和计时器等。通过这种复制方式创建出子进程后,原有进程和子进程都从函数fork返回,各自继续往下运行,但是原进程的fork返回值与子进程的fork返回值不同,在原进程中,fork返回子进程的pid,而在子进程中,fork返回0,如果fork返回负值,表示创建子进程失败。 子进程和父进程继续执行fork调用之后的指令。子进程是父进程的副本。例如,子进 程获得父进程数据空间、堆和栈的副本。注意,这是子进程所有用的副本。父进程和子进程并不共享这些存储空间部分。父进程和子进程共享正文段。 2、原型: #include pid_t vfork(void); vfork函数的调用序列和返回值与fork相同,但两者的语义不同。vfork函数用于创建一个新进程,而该进程的目的是exec一个新程序。vfork不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec,它在父进程的空间中运行。vfork保证子进程先运行,在它调用exit之后父进程才可能被调度运行,当子进程调用这两个函数中的任意一个时,父进程会恢复运行。 【程序代码】 1、1_fork.c

操作系统实验---进程的创建与控制

实验报告 实验题目 姓名: 学号: 课程名称:操作系统实验 所在学院:信息科学与工程学院 专业班级:计算机 任课教师:

核心为fork( )完成以下操作: (1)为新进程分配一进程表项和进程标识符 进入fork( )后,核心检查系统是否有足够的资源来建立一个新进程。若资源不足,则fork( )系统调用失败;否则,核心为新进程分配一进程表项和唯一的进程标识符。 (2)检查同时运行的进程数目超过预先规定的最大数目时,fork( )系统调用失败。(3)拷贝进程表项中的数据将父进程的当前目录和所有已打开的数据拷贝到子进程表项中,并置进程的状态为“创建”状态。 (4)子进程继承父进程的所有文件对父进程当前目录和所有已打开的文件表项中的引用计数加1。 (5)为子进程创建进程上、下文进程创建结束,设子进程状态为“内存中就绪”并返回子进程的标识符。 (6)子进程执行虽然父进程与子进程程序完全相同,但每个进程都有自己的程序计数器PC(注意子进程的注意子进程的PC 开始位置),然后根据pid 变量保存的fork( )返回值的不同,执行了不同的分支语句。

四、 实验过程、步骤及内容 1、编写一段程序,使用系统调用 fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及'son ……',父进程显示 'parent ……',观察结果,分析原因。 3、用 fork( )创建一个进程,再调用 exec( )用新的程序替换该子进程的内容 4、用 fork( )建立如下形式的进程树: 各个进程中都打印出本身 PID 和其父进程的 PID ,并用 wait( )来控制进程执行顺序,打印出正确和期望的结果。 实验步骤 1. 创建空文件,后缀为.c 2. 打开文件编写代码(利用参考代码) D 进程 B 进程 C 进程 A 进程

操作系统进程管理实验报告

操作系统进程管理实验报告 一、引言 在现代计算机科学中,操作系统的进程管理是确保系统高效运行的关键环节。本实验旨在通过观察和分析操作系统的进程管理行为,深入理解进程的创建、运行和终止过程,以及操作系统如何对进程进行调度和资源分配。 二、实验目标 1、理解进程的基本概念、进程状态及转换。 2、掌握进程的创建、终止和调度方法。 3、观察和分析进程在运行过程中的资源消耗和调度行为。 4、分析操作系统对进程的资源分配和调度策略对系统性能的影响。 三、实验环境与工具 本实验在Linux操作系统上进行,使用GNU/Linux环境下的工具进行进程的创建、监控和调度。 四、实验步骤与记录

1、创建进程:使用shell命令“fork”创建一个新的进程。记录下父进程和子进程的PID,以及它们在内存中的状态。 2、进程状态观察:使用“ps”命令查看当前运行进程的状态,包括进程的PID、运行时间、CPU使用率等。同时,使用“top”命令实时监控系统的CPU、内存等资源的使用情况。 3、进程调度:在“crontab”中设置定时任务,观察系统如何根据预设的调度策略分配CPU资源给各个进程。 4、资源分配:通过修改进程的优先级(使用“nice”命令),观察系统如何调整资源分配策略。 5、终止进程:使用“kill”命令终止一个进程,并观察系统如何处理该进程占用的资源。 五、实验结果与分析 1、创建进程:通过“fork”系统调用,成功创建了一个新的进程,并获取了父进程和子进程的PID。在内存中,父进程和子进程的状态分别为“running”和“ready”。 2、进程状态观察:使用“ps”命令可以看到父进程和子进程的状态

linux进程管理的实验报告

linux进程管理的实验报告 Linux进程管理的实验报告 引言: Linux操作系统是一种开源的操作系统,以其稳定性和高度可定制性而受到广泛使用。在Linux系统中,进程管理是一个重要的组成部分,它负责控制和管理 系统中运行的进程。本实验报告旨在探讨Linux进程管理的相关概念和实践。一、进程的基本概念 进程是指在计算机系统中正在运行的一个程序实例。每个进程都有自己的内存 空间、寄存器和状态。在Linux系统中,每个进程都有一个唯一的进程标识符(PID),用于标识和管理进程。 二、进程的创建和终止 在Linux系统中,进程的创建是通过fork()系统调用来实现的。fork()系统调用会创建一个新的进程,新进程是原进程的一个副本,包括代码、数据和堆栈等。 新进程和原进程共享相同的代码段,但是拥有独立的数据和堆栈。 进程的终止可以通过exit()系统调用来实现。当一个进程调用exit()系统调用时,它会释放所有的资源,并通知操作系统该进程已经终止。此外,父进程可以通 过wait()系统调用来等待子进程的终止,并获取子进程的退出状态。 三、进程的调度和优先级 在Linux系统中,进程的调度是由调度器负责的。调度器根据进程的优先级和 调度策略来确定下一个要运行的进程。Linux系统中有多种调度策略,如先来先服务(FCFS)、最短作业优先(SJF)、轮转调度(Round Robin)等。 进程的优先级用一个数字表示,范围从-20到19,其中-20表示最高优先级,

19表示最低优先级。较高优先级的进程会被优先调度,以保证其能够及时响应 用户的请求。 四、进程的状态转换 在Linux系统中,进程可以处于不同的状态,如运行态、就绪态和阻塞态等。 进程的状态转换是由操作系统根据进程的行为和外部事件来控制的。 当一个进程被创建时,它处于就绪态,等待被调度执行。当进程获得CPU资源 并开始执行时,它进入运行态。当进程需要等待某个事件发生时,如等待用户 输入或等待某个文件读写完成,它会进入阻塞态。当事件发生后,进程会从阻 塞态转换回就绪态,等待被调度执行。 五、进程间通信 在Linux系统中,进程间通信(IPC)是实现不同进程之间数据交换和共享的一 种机制。Linux提供了多种IPC机制,如管道、信号量、消息队列和共享内存等。管道是一种单向的通信机制,用于实现父子进程之间的通信。信号量是一种用 于进程同步和互斥的机制,可以通过P操作和V操作来实现进程之间的互斥和 同步。消息队列是一种用于进程之间传递数据的机制,进程可以通过发送和接 收消息来进行通信。共享内存是一种用于多个进程之间共享数据的机制,进程 可以通过读写共享内存来实现数据的共享。 结论: 通过本次实验,我们深入了解了Linux进程管理的相关概念和实践。我们了解 了进程的创建和终止、调度和优先级、状态转换以及进程间通信等内容。进程 管理是操作系统中一个重要的组成部分,它对于系统的稳定性和性能至关重要。通过合理的进程管理,可以提高系统的吞吐量和响应时间,提升用户体验。

linux程序设计实验报告

linux程序设计实验报告 Linux程序设计实验报告 引言 在计算机科学领域,操作系统是一项至关重要的基础设施。Linux作为一种开源的操作系统,具有广泛的应用和开发者社区。本次实验旨在通过Linux程序设计,深入了解Linux操作系统的内部机制和编程技巧。 一、实验背景与目的 Linux操作系统以其稳定性、安全性和灵活性而闻名。本次实验的目的是通过编写Linux程序,探索Linux操作系统的核心原理和实践技巧。通过实践操作,我们可以更好地理解Linux内核、进程管理、文件系统和网络通信等方面的工作原理。 二、实验环境与工具 本次实验使用的实验环境为Ubuntu操作系统,我们将使用C语言进行程序设计。以下是本次实验所用到的工具和软件: 1. Ubuntu 18.04 LTS操作系统 2. GCC编译器 3. GNU Make工具 4. Vim文本编辑器 三、实验内容与步骤 1. 进程管理 在Linux操作系统中,进程是程序的执行实例。我们将通过编写一个简单的多进程程序来理解进程的创建、调度和终止。首先,我们需要使用fork()系统调用

创建一个新的子进程。然后,通过exec()系统调用加载一个新的程序到子进程中。最后,使用wait()系统调用等待子进程的结束并回收资源。 2. 文件系统 Linux操作系统中的文件系统是一种层次化的存储结构。我们将通过编写一个简单的文件读写程序来理解文件系统的基本操作。首先,我们需要使用open()系 统调用打开一个文件,并指定读写权限。然后,使用read()和write()系统调用 读取和写入文件的内容。最后,使用close()系统调用关闭文件。 3. 网络通信 Linux操作系统提供了丰富的网络通信功能。我们将通过编写一个简单的网络通信程序来理解网络套接字的使用。首先,我们需要使用socket()系统调用创建一个套接字,并指定通信协议。然后,使用bind()系统调用将套接字绑定到指定 的IP地址和端口号。最后,使用send()和recv()系统调用发送和接收数据。 四、实验结果与分析 通过完成上述实验内容,我们可以得到以下实验结果和分析: 1. 进程管理实验:我们成功创建了多个子进程,并通过exec()系统调用加载了 不同的程序。通过wait()系统调用,我们可以正确地回收子进程的资源,避免了资源泄漏。 2. 文件系统实验:我们成功打开了指定的文件,并使用read()和write()系统调 用读取和写入了文件的内容。通过close()系统调用,我们可以正确地关闭文件,释放了文件的占用资源。 3. 网络通信实验:我们成功创建了一个套接字,并使用bind()系统调用将其绑 定到指定的IP地址和端口号。通过send()和recv()系统调用,我们可以正确地

嵌入式linux实验报告

嵌入式操作系统Linux 实验报告 专业:计算机科学与技术 班级:13419011 学号:1341901124 姓名:武易 组员:朱清宇

实验一Linux下进程的创建 一实验目的 1.掌握Linux下进程的创建及退出操作 2.了解fork、execl、wait、waitpid及之间的关系 二实验内容 创建进程,利用fork函数创建子进程,使其调用execl函数,退出进程后调用wait或waitpid清理进程。 三实验过程 1.进程的创建 许多进程可以并发的运行同一程序,这些进程共享内存中程序正文的单一副本,但每个进程有自己的单独的数据和堆栈区。一个进程可以在任何时刻可以执行新的程序,并且在它的生命周期中可以运行几个程序;又如,只要用户输入一条命令,shell进程就创建一个新进程。 fork函数用于在进程中创建一个新进程,新进程是子进程。原型如下: #include /* 提供类型pid_t的定义 */ #include /* 提供函数的定义 */ pid_t fork(void); 使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间 fork系统调用为父子进程返回不同的值,fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 在父进程中,fork返回新创建子进程的进程ID;

✓在子进程中,fork返回0; ✓如果出现错误,fork返回一个负值; 用fork创建子进程后执行的是和父进程相同的程序,子进程可以通过调用exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程(例如其m a i n函数)开始执行。调用e x e c并不创建新进程,进程I D并未改变,只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。 e x e c函数原型 execl,execlp,execle,execv,execve和execvp 2.进程的退出 一个进程正常终止有三种方式: 由main()函数返回; 调用exit()函数; 调用_exit()或_Exit()函数。 #include #include exit:void exit(int status) _exit:void _exit(int status) 3.wait和waitpid 一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集。如果一个进程已经终止,但是

Linux进程管理-实验报告

《Linux 操作系统设计实践》实验一:进程管理 实验目的: (1) 加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质. (3) 学习通过进程执行新的目标程序的方法。 (4) 了解Linux 系统中进程信号处理的基本原理. 实验环境:Red Hat Linux 实验内容:(1)进程的创建 编写一段程序,使用系统调用fork()创建两个子进程,当此进程运 行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏 幕上显示一个字符,父进程显示字符“a";子进程分别显示字符“b” 和字符“c”,试观察记录屏幕上的显示结果,并分析原因. 程序代码: #include

linux创建进程实验报告范文

linux创建进程实验报告范文 实验二进程的创建 一、实验目的熟悉进程的创建过程,了解系统调用函数fork()和execl()。 二、实验内容 1、阅读实例代码fork1,并编辑、编译、运行,记录程序的运行结果,尝试给 2、阅读实例代码fork2,并编辑、编译、运行,记录程序的运行结果,尝试给 程序的方法。 3、修改fork2,使之能把运行的命令和程序作为参数传给fork2。 三、设计思想 1、程序框架 pid=-1pid=0pid>0 2、用到的文件系统调用函数 fork()和execl() 四、调试过程 1、测试数据设计 (1)fork1 命名程序1:

编写程序1: 编译程序1: 运行程序1: (2)fork2 编写程序2: 运行程序2: (3)修改fork2 编写修改程序2: 修改后的运行结果: 2、测试结果分析 (1)对于程序1:因为系统调用fork()函数是一次调用两次返回值,而且先生 成子进程还是父进程是不确定的,所以第一次执行生成子进程的时候 返回的pid =0,判断pid!=-1,所以输出了I’mthechild.I’mtheparent.第二次, 执行父进程的时候,返回的是子进程的进程号pid>0,即pid的值仍 然不为-1, 所以又输出了一次I’mthechild.I’mtheparent。

(2)对于程序2:第一次调用fork()函数时,由于执行的是子进程 还是父进程 是随机的,所以第一次对父进程返回的是子进程的进程号(大于0),即pid>0, 所以输出I’mtheparent.Programend.当第二次执行子进程时返回值 是0, 即pid=0,所以输出I’mthechild.并调用了execl()函数,查看了 指定路 径中的文件。 (3)对于修改后的程序2:改变了系统调用execl()中参数的文件路 径和可执行 文件名,即可在程序fork2.c中执行另一个程序wyf.c(但要注意可 执行文件名 是123)。 五、总结 1、调试过程中遇到的主要问题及解决过程 运行程序2的时候如果不加execl()函数的头文件会提示 警告, 而且因为execl()的第三个参数是字符型指针数组,所以要强制转换 成指针型, 即写成(char*)0才行。

进程创建实验报告

进程创建实验报告 进程创建实验报告 引言: 进程是计算机系统中的基本概念之一,也是操作系统的核心概念之一。进程创 建是操作系统中的一个重要操作,它涉及到资源的分配和管理,对于操作系统 的正常运行具有重要意义。本实验旨在通过编写一个简单的程序,探索进程创 建的过程以及相关概念。 一、实验目的 本实验的主要目的是了解进程创建的基本过程,并掌握相关的概念和操作。通 过实践,加深对操作系统的理解和应用。 二、实验环境 本实验使用的是Linux操作系统,具体的版本为Ubuntu 20.04 LTS。在该环境下,我们可以使用C语言编写程序,并通过gcc编译器进行编译和运行。 三、实验步骤 1. 编写源代码 首先,我们需要编写一个简单的C语言程序,用于创建一个新的进程。在程序中,我们可以使用fork()函数来创建新的进程。具体的代码如下: ```c #include #include int main() { pid_t pid;

pid = fork(); if (pid < 0) { printf("Failed to create a new process.\n"); } else if (pid == 0) { printf("This is the child process.\n"); } else { printf("This is the parent process.\n"); } return 0; } ``` 2. 编译和运行程序 在终端中,使用gcc编译器将源代码编译为可执行文件。具体的命令如下: ```shell gcc -o process_create process_create.c ``` 编译成功后,我们可以通过运行可执行文件来创建新的进程。具体的命令如下:```shell ./process_create ``` 3. 观察输出结果 运行程序后,我们可以观察到输出结果。如果成功创建了新的进程,那么将会

实验一一进程创建实验

实验一一进程创建实验 实验一(一)进程的创建实验实验目的1、掌握进程的概念,明确进程的含义2、认识并了解并发执行的实质实验内容1、编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示"a",子进程分别显示字符"b"和字符"c"。试观察记录屏幕上的显示结果,并分析原因。 2、修改上述程序,每一个进程循环显示一句话。子进程显示"daughter"及"son",父进程显示"parent",观察结果,分析原因。实验准备(1)阅读LINUX的fork.c源码文件(见附录二),分析进程的创建过程。 (2)阅读LINUX的sched.c源码文件(见附录三),加深对进程管理概念的认识。 实验指导一、进程UNIX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、共享存储区等。每个区又分为若干页,每个进程配置有唯一的进程控制块PCB,用于控制和管理进程。 PCB的数据结构如下: 1、进程表项(ProcessTableEntry)。包括一些最常用的核心数据:进程标识符PID、用户标识符UID、进程状态、事件描述符、进程和U区在内存或外存的地址、软中断信号、计时域、进程的大小、偏置

值nice、指向就绪队列中下一个PCB的指针P_Link、指向U区进程 正文、数据及栈在内存区域的指针。 2、U区(UArea)。用于存放进程表项的一些扩充信息。 每一个进程都有一个私用的U区,其中含有:进程表项指针、真正用户标识符u-ruid(readuserID)、有效用户标识符 u-euid(effectiveuserID)、用户文件描述符表、计时器、内部I/O 参数、限制字段、差错字段、返回值、信号处理数组。 由于UNIX系统采用段页式存储管理,为了把段的起始虚地址变换为 段在系统中的物理地址,便于实现区的共享,所以还有: 3、系统区表项。以存放各个段在物理存储器中的位置等信息。 系统把一个进程的虚地址空间划分为若干个连续的逻辑区,有正文区、数据区、栈区等。这些区是可被共享和保护的独立实体,多个进程可共享一个区。为了对区进行管理,核心中设置一个系统区表,各表项中记录了以下有关描述活动 区的信息: 区的类型和大小、区的状态、区在物理存储器中的位置、引用计数、指向文件索引结点的指针。 4、进程区表系统为每个进程配置了一张进程区表。表中,每一项记 录一个区的起始虚地址及指向系统区表中对应的区表项。核心通过查找进程区表和系统区表,便可将区的逻辑地址变换为物理地址。 二、进程映像UNIX系统中,进程是进程映像的执行过程,也就是正 在执行的进程实体。它由三部分组成:

Linux操作系统实验实验报告

实验4安装Linux 系统 【实验目的和要求】:安装Linux 系统,掌握操作系统的系统配置,建立应用环 境的过程。 【实验内容】: 1、首先在windows 系统中安装虚拟机。在网上找到VMware Worksttion Pro 版 本,确定安装目录。一直下一步,不需要太多的说明。 图为安装完成后的界面。 3、然后在阿里巴巴开源镜像网站下载centos 系统镜像,然后虚拟机创建新的虚 拟机, 您希望使用什么类型的KS 7 O 典型(推荐)(T) 通过几个胃早的步骤创谨Workstation 12-0 虫拟机。 ©自定义(鬲级XO 创建希有SCSI 揑制丹类型.虚拟蹴盘类型 以及与旧板VMware 产品兼吝性等高级选项 的虚拟机。 帮助 <上一步(B) 下一歩(N) > 毁消 一 欢迎使用新建虚拟机向导 <| VMWARE WORKSTATION PRO I if

新舷拟血导 迭择客户机提作无绕 雌以机中将安装輔按作稱P X 直户机幔作系绒 O Microsoft Wndow$(W) ®Unux(L) O Novel NetWare(E) O Soiaris(S) O VMware ESX(X) OMffi(o ) «»(V) Centos 64 位 7 舉助 | <上一步(B) 下一步(N) > 駛泊 it&K {机的内存 您旻为畑氏机使用多少内存3 権定分购此虑hrn 的內秤里。内祁大小仑次为4舶的倍数。 G88 G8G8 8G8G8 M3 M3M3hB NB KB he m 643216 842112%28U 32168 4 521丄诫拟购内存 (M): 4 B 锻大播荐内存: 6312 MB a 毀消 进行一些简单的虚拟机设置,设置了网络链接nat 模式等 等。 2 66 20 GB Hfi£E 用爻件匕- NAT atweJi 令在 GJtSfeOJliMWtfWttlL ・ifi 备 口 ► Mhon_«r»fh * ' 一 Centosjull ►开启 ittfim C ;Vunii\

Linux实验报告材料(2)

Linux实验报告 姓名黄芳恺 班级软件工程114 学号119074258 指导教师阮越

目录 实验一Linux基本命令的使用 实验二简单Shell程序设计 实验三Linux下简单C程序设计与文件操作实验四Linux下进程操作与进程间通信 实验五Linux线程的使用

实验六Linux进程间的IPC 实验七Linux下访问Mysql数据库实验八Linux下网络编程 练习题:grep、bash、生产者消费者

实验一Linux基本命令的使用 1、实验目的 学习和掌握Linux的基本命令。 2、实验内容和步骤 步骤1:以user_login用户身份并使用telnet登录Linux服务器,按照提示创建自己的账户和口令。 步骤2:使用新创建的用户账户和口令登录Linux系统,察看登录后的界面。 步骤3:使用pwd命令察看当前的工作目录,然后用ls命令查看当前目录下的内容,尝试使用-a,-l,-F,-A,-lF等不同选项并比较不同之处。 -a do not ignore entries starting with -I, --ignore=PATTERN do not list implied entries matching shell PATTERN -l use a long listing format -F, --classify append indicator (one of */=>@|) to entries -A, --almost-all do not list implied . and ..

-lF ignore file 步骤4:在当前目录下建立一个名为test的新目录,然后将工作目录切换到test下,尝试将/etc目录下的文件passwd拷贝到该目录下(cp 源文件目的目录)。察看当前目录下的passwd文件的属主和文件权限。 步骤5:尝试向当前目录下的passwd文件和/etc/passwd文件分别写入一些新内容(可使用echo “字符串”>>文件的命令),看看操作能否成功,如果不能成功,请说明原因。用cat命令浏览文件password的内容,用more命令进行浏览翻页操作,再用less命令浏览文件的内容。比较这几个命令的不同之处 对当前目录中成功,因为该目录下的passwd文件对当前用户具有写的权限。对 /etc/passwd文件的操作被拒绝因为对当前用户不具有写的权限

相关主题
文本预览
相关文档 最新文档