操作系统Linux进程创建
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进程的创建
1、编写一段程序,使用系统调用 fork( )创建两个子进程。当此程序运行时,在系统中 有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符。 #include<stdio.h> main() {
int p,x; p=fork(); if(p>0) {
x=fork(); if(x>0)
查询进程树。
3、运行程序,分析运行结果。 #include <stdio.h> main() { int p,x,ppid,pid;
x=0; p=fork(); if(p>0) { printf("parent output x=%d\n",++x);
ppid=getpid(); printf("Thi id number of parent is:ppid=%d\n",ppid); } else { printf("child output x=%d\n",++x); pid=getpid(); printf("Thi id number of child is:pid=%d\n",pid); } } 运行结果: Parent output x=1 This id number of parent is:ppid=3110 Child output x =1 This is number of child is:pid=3111
printf("father\n"); else
printf("child2"); } else
printf("child1"); } 输出结果: child1 child2 father
2、运行以下程序,分析程序执行过程中产生的进程情况。 #include <stdio.h> main() {
int p,x; p=fork(); if (p>0)
fork(); else{
fork(); fork(); } sleep(15); }
实验步骤: 编译连接 gcc –o forktree forktree.c 后台运行 ./forktree & 使用 pstree –h 查看进程树
运行结果:
├─gnome-terminal─┬─bash─┬─forktree─┬─forktree─┬─forkt
获得处理机执行,此进程很快执行完,将处理机还给子进程,子进程也很快执行
完,将处理机还给父进程,父进程 P>0 执行 if 语句,运行 fork()函数,又创建
一个进程 forktree,称之为第二子进程,此进程获得处理机执行很快运行完,
将处理机还给父进程,父进程运行 sleep(15)语句,休眠 15 秒,用 pstree 命令
进程获得处理机往下执行,子进程等待;执行到第二个 fork()函数时,孙进程
又创建一个进程 forktree,称之为重孙进程,重孙进程很快执行完,将处理机
还给孙进程,孙进程很快执行完,将处理机还给子进程;子进程继续往下执行,
执行到第二个 fork()函数,又创建一个进程 forktree,称之为第二孙进程,并
分析:fork 创建进程的时候子进程与父进程共享代码区,子进程复制父进程的数据区,所以, 两个进程中的数据互不影响都是 1。
4、loop.c #include <stdio.h> main() {
while(1){ }; { 实验步骤: 编译 gcc loop.c –o loop 后台运行 ./loop &(可多次使用该命令) 多次使用 ps 命令查看进程状态 结果: F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 2645 2643 0 80 0 - 1444 wait pts/0 00:00:00 bash 0 R 1000 3622 2645 78 80 0 - 403 - pts/0 00:00:18 loop 0 R 1000 3627 2645 39 80 0 - 403 - pts/0 00:00:02 loop 0 R 1000 3628 2645 39 80 0 - 403 - pts/0 00:00:01 loop 0 R 1000 3630 2645 0 80 0 - 625 - pts/0 00:00:00 ps
ree───forktree
│பைடு நூலகம்
│
│
│
└─forktree
│
│
│
└─forktree
│
│
└─pstree
分析:程序运行,系统首先创建一个进程 forktree,执行到 p=fork()创建一个子
进程 forktree,子进程获得处理机优先执行,父进程等待;执行 else,当执行
到第一个 fork()函数时,子进程创建了一个进程 forktree,称之为孙进程,孙
1、编写一段程序,使用系统调用 fork( )创建两个子进程。当此程序运行时,在系统中 有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符。 #include<stdio.h> main() {
int p,x; p=fork(); if(p>0) {
x=fork(); if(x>0)
查询进程树。
3、运行程序,分析运行结果。 #include <stdio.h> main() { int p,x,ppid,pid;
x=0; p=fork(); if(p>0) { printf("parent output x=%d\n",++x);
ppid=getpid(); printf("Thi id number of parent is:ppid=%d\n",ppid); } else { printf("child output x=%d\n",++x); pid=getpid(); printf("Thi id number of child is:pid=%d\n",pid); } } 运行结果: Parent output x=1 This id number of parent is:ppid=3110 Child output x =1 This is number of child is:pid=3111
printf("father\n"); else
printf("child2"); } else
printf("child1"); } 输出结果: child1 child2 father
2、运行以下程序,分析程序执行过程中产生的进程情况。 #include <stdio.h> main() {
int p,x; p=fork(); if (p>0)
fork(); else{
fork(); fork(); } sleep(15); }
实验步骤: 编译连接 gcc –o forktree forktree.c 后台运行 ./forktree & 使用 pstree –h 查看进程树
运行结果:
├─gnome-terminal─┬─bash─┬─forktree─┬─forktree─┬─forkt
获得处理机执行,此进程很快执行完,将处理机还给子进程,子进程也很快执行
完,将处理机还给父进程,父进程 P>0 执行 if 语句,运行 fork()函数,又创建
一个进程 forktree,称之为第二子进程,此进程获得处理机执行很快运行完,
将处理机还给父进程,父进程运行 sleep(15)语句,休眠 15 秒,用 pstree 命令
进程获得处理机往下执行,子进程等待;执行到第二个 fork()函数时,孙进程
又创建一个进程 forktree,称之为重孙进程,重孙进程很快执行完,将处理机
还给孙进程,孙进程很快执行完,将处理机还给子进程;子进程继续往下执行,
执行到第二个 fork()函数,又创建一个进程 forktree,称之为第二孙进程,并
分析:fork 创建进程的时候子进程与父进程共享代码区,子进程复制父进程的数据区,所以, 两个进程中的数据互不影响都是 1。
4、loop.c #include <stdio.h> main() {
while(1){ }; { 实验步骤: 编译 gcc loop.c –o loop 后台运行 ./loop &(可多次使用该命令) 多次使用 ps 命令查看进程状态 结果: F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 2645 2643 0 80 0 - 1444 wait pts/0 00:00:00 bash 0 R 1000 3622 2645 78 80 0 - 403 - pts/0 00:00:18 loop 0 R 1000 3627 2645 39 80 0 - 403 - pts/0 00:00:02 loop 0 R 1000 3628 2645 39 80 0 - 403 - pts/0 00:00:01 loop 0 R 1000 3630 2645 0 80 0 - 625 - pts/0 00:00:00 ps
ree───forktree
│பைடு நூலகம்
│
│
│
└─forktree
│
│
│
└─forktree
│
│
└─pstree
分析:程序运行,系统首先创建一个进程 forktree,执行到 p=fork()创建一个子
进程 forktree,子进程获得处理机优先执行,父进程等待;执行 else,当执行
到第一个 fork()函数时,子进程创建了一个进程 forktree,称之为孙进程,孙