首页 操作系统实验三

操作系统实验三

举报
开通vip

操作系统实验三操作系统实验三 实验二 Linux进程控制 一(实验目的 1. 掌握进程的概念,明确进程和程序的区别。 2. 认识和了解并发执行的实质。 3. 了解Linux系统下进程创建的原理及方法。 三(实验内容 1. 编写一段程序,使用系统调用fork()创建两个子进程。各进程显示不同的信息,如父进程显示字符“a”,子进程分别显示字符“b”和“c”。多次运行观察显示结果,并分析产生这种执行效果的原因。 2. 修改上面编写的程序,将每个进程的输出由单个字符改为循环输出一句话,如父进程显示:“parent:”加上...

操作系统实验三
操作系统实验三 实验二 Linux进程控制 一(实验目的 1. 掌握进程的概念,明确进程和程序的区别。 2. 认识和了解并发执行的实质。 3. 了解Linux系统下进程创建的原理及方法。 三(实验内容 1. 编写一段程序,使用系统调用fork()创建两个子进程。各进程显示不同的信息,如父进程显示字符“a”,子进程分别显示字符“b”和“c”。多次运行观察显示结果,并分析产生这种执行效果的原因。 2. 修改上面编写的程序,将每个进程的输出由单个字符改为循环输出一句话,如父进程显示:“parent:”加上进程ID,子进程分别显示:“Child1:”(或“Child2:”)加上自己的进程ID。再多次运行观察程序执行时屏幕上出现的现象,并分析原因。 3.一个父进程创建一个子进程,子进程通过exec系统调用执行另一个文件。各自的代码中显示不同的信息,从其运行结果可看出两个进程并发执行的效果。 4. 编写程序创建如图所示的进程树,在每个进程中显示当前进程ID和父进程ID。 四(实验指导 1. gcc编译器 GNU C 编译器(GCC) gcc [options] [filenames] 不用任何选项编译一个程序时, GCC 将会建立(假定编译成功)一个名 , gcc test.c 将在当前目录下产生一个叫a.out 为a.out 的可执行文件. 例如 的文件: 用 -o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out: gcc -o count count.c 注意: 当你使用 -o 选项时, -o 后面必须跟一个文件名. 2. Linux进程创建相关的系统调用 (1)fork( ) 创建一个新的子进程。其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码、组代码、环境变量、已打开的文件代码、工作目录和资源限制。 系统调用格式: int fork() 如果Fork成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果fork失败则直接返回-1。 (2)getpid() 取得目前进程的识别码(进程ID),许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。 系统调用格式: int getpid() 例如:#include main() {printf(“pid=%d\n”,getpid());} (3)getppid 取得目前进程的父进程识别码。 系统调用格式: int getppid() 例如:#include main() {printf(“My parent’s pid=%d\n”,getppid());} (4)exec系统调用 #include int execl(const char *path, const char *arg, ...); int execlp(const char *file, const char *arg, ...); int execle(const char *path, const char *arg, ..., char *const envp[]); int execv(const char *path, char *const argv[]); int execvp(const char *file, char *const argv[]); int execve(const char *path, char *const argv[], char *const envp[]); 在以上六个exec函数中,第一个参数如果为pathname,说明被执行程序是由路径名指定,如果为filename,则说明是由文件名指定;第二个参数如果为数组,说明被执行程序的参数是由一个数组来索引(数组必须含有一个空指针来表示结束),否则需要将参数一一列出;execle()及execve()的envp指针数组表示这两个函数显示指定一个环境表(这个数组必须以一个空指针结束),而另外四个函数则用外部变量environ的当前值来创建一个环境表传递给新程序。 int execl(const char* fullpath, const char* arg, ....) 使用范例:execl(“/bin/ls”, ”ls”, ”-al”, NULL) int execlp(const char* file, const char* arg, ....) 使用范例:execlp(“ls”, ”ls”, ”-al”, NULL) int execle(const char* fullpath, const char* arg, ...., char* const envp[]) 使用范例:execle(“/bin/ls”, ”ls”, ”-al”, NULL, environ) int execv(const char * fullpath, char* const argv[]) 使用范例:execle(“/bin/mkdir”, argv) // int main(int argc, char* argv[]) 或 char* const p[] = {"a.out", "testDir", NULL}; execv("/bin/mkdir", p); int execvp(const char* file, const char* arg, ....) 使用范例:execlp(“ls”, argv) // int main(int argc, char* argv[]) 或 char* const p[] = {"a.out", "testDir", NULL}; execvp("mkdir", p); int execve(const char* fullpath, const char* arg, ...., char* const envp[]) 使用范例:execve(“/bin/ls”, argv, environ) 或 char* const p[] = {"a.out", "testDir", NULL}; execve("/bin/mkdir", p); 3(进程创建程序实示例: #include main() { int p1; while((p1=fork())= = -1); if(p1= =0) printf(“This is a child process.”); /*在子进程中*/ else /*在父进程中*/ { Printf(“This is a parent process.”); } }
本文档为【操作系统实验三】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_841159
暂无简介~
格式:doc
大小:17KB
软件:Word
页数:5
分类:
上传时间:2017-09-17
浏览量:38