目录
问题
- 有的时候,程序运行后的输出结果会在cmd的输出提示之后:
- 本实验中是父进程创建了两个子进程,然后父进程输出 a 后结束,子进程分别输出 b c 后结束。
- 出现该问题其实就在于父进程可能比子进程先结束,此时cmd提示就会冒出来。
- 当我们在命令行里面输入命令并回车执行时,命令内容是交给了shell去执行,而shell是有很多种具体实现的程序:如 bath,zsh ...... 并且正在使用的 shell 是可以修改的。
- 需要查看自己的shell是谁,可以执行cmd命令:echo $SHELL
- cmd就会输出当前使用的shell的位置:
- 原因:我们在shell中运行我们写的实验程序($ ./fork_main)时,shell会等待fork_main这个进程结束,但fork_main里面又创建了两个子进程,shell是不管的,一旦shell启动的父进程fork_main结束,shell的提示(coolight@coolight-Desktop:~$)就会冒出来,而此时子进程才开始输出,因此会出现有些程序输出是在shell提示之后。
实验具体内容
实验内容
编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。
涉及的系统调用
- fork()
- 创建一个新进程。
- 系统调用格式:
- pid=fork( )
- 参数定义:
- int fork( )
- fork( )返回值意义如下:
- 0:在子进程中,pid变量保存的fork( )返回值为0,表示当前进程是子进程。
- >0:在父进程中,pid变量保存的fork( )返回值为子进程的id值(进程唯一标识符)。
- -1:创建失败。
- 如果fork( )调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork( )被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork( )父进程(parent process)的副本,称为子进程(child process)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。
- 核心为fork( )完成以下操作:
- (1)为新进程分配一进程表项和进程标识符,进入fork( )后,核心检查系统是否有足够的资源来建立一个新进程。若资源不足,则fork( )系统调用失败;否则,核心为新进程分配一进程表项和唯一的进程标识符。
- (2)检查同时运行的进程数目,超过预先规定的最大数目时,fork( )系统调用失败。
- (3)拷贝进程表项中的数据,将父进程的当前目录和所有已打开的数据拷贝到子进程表项中,并置进程的状态为“创建”状态。
- (4)子进程继承父进程的所有文件,对父进程当前目录和所有已打开的文件表项中的引用计数加1。
- (5)为子进程创建进程上、下文,进程创建结束,设子进程状态为“内存中就绪”并返回子进程的标识符。
- (6)子进程执行,虽然父进程与子进程程序完全相同,但每个进程都有自己的程序计数器PC(注意子进程的PC开始位置),然后根据pid变量保存的fork( )返回值的不同,执行了不同的分支语句。
- 例:
….. pid=fork( ); if (! pid) printf("I'm the child process!\n"); else if (pid>0) printf("I'm the parent process! \n"); else printf("Fork fail!\n"); …… |
….. pid=fork( ); if (! pid) printf("I'm the child process!\n"); else if (pid>0) printf("I'm the parent process!\n "); else printf("Fork fail!\n"); …… | ….. pid=fork( ); if (! pid) printf("I'm the child process!\n"); else if (pid>0) printf("I'm the parent process!\n "); else printf("Fork fail!\n"); …… |
源代码
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
cout << "<< coolight | [软件202,2006300052,郑泳坤]" << endl;
int fork_num = fork();
if(fork_num == -1){
cout << "<< fork Error" << endl;
}else if(fork_num == 0){ //子进程
fork_num = fork();
if(fork_num == -1){
cout << "<< fork Error" << endl;
}else if(fork_num == 0){ //子进程
sleep(0.5);
cout << "c" << endl;
}else if(fork_num > 0){
sleep(0.5);
cout << "b" << endl;
}
}else if(fork_num > 0){
sleep(0.5);
cout << "a" << endl;
}
return 0;g
}
运行结果截图
思考
- 系统是怎样创建进程的?
- 主要是四个步骤
- 申请空白PCB(过程控制块)
- 为新工序分配资源
- 初始化PCB
- 将新进程插入就绪队列
- 当使用fork()创建时将复制父进程的PCB块,U区和内存图像到新进程。Fork()会用到写时复制,子进程会和父进程共享一些资源,直到有人对一部分数据进行写操作,才会真正开辟空间复制出来这一部分资源
- 主要是四个步骤
- 当首次调用新创建进程时,其入口在哪里?
- 父进程和子进程入口都在fork()函数调用的下一句指令代码。但由于fork()返回值不同,两者可以依据分支语句区分,然后后续执行不同的代码
I’m very pleased to find this great site. I need to to thank you for ones time for this particularly fantastic read!! I definitely savored every bit of it and i also have you saved to fav to check out new stuff on your blog.
Thanks for the helpful article. More like this at εξωτερικα κουφωματα αλουμινιου
Superb, what a website it is! This web site gives valuable information to us, keep it
up.
Dubai helicopter tours offer an unparalleled opportunity to see the city’s famous attractions without the crowds, allowing you to truly appreciate their magnificence 12 minute helicopter ride dubai
Thanks for the valuable article. More at free video chat
I’m impressed, I have to admit. Seldom do I encounter a blog that’s equally educative and engaging, and without a doubt, you have hit the nail on the head. The issue is something which not enough folks are speaking intelligently about. Now i’m very happy that I found this during my hunt for something relating to this.
Hot air ballooning is the perfect way to add an element of adventure to your Dubai trip. Book your ride with hot air balloon ride experiences dubai and prepare for an unforgettable experience
Las cabañas en Pucón son el refugio ideal para escapar del estrés y relajarse rodeado de naturaleza https://www.empowher.com/user/4345352
Thanks for the useful suggestions. Discover more at κουφωματα αλουμινιου ξυλου
¡Qué gran variedad de inmobiliarias! Me gustaría conocer más sobre https://speakerdeck.com/inmobiliariassfds y las propiedades que tienen disponibles
Very informative article. For similar content, visit ilumaplay
Good post. I learn something totally new and challenging on websites I stumbleupon everyday. It will always be helpful to read content from other authors and use a little something from their web sites.
Ovo je odlična tema koja će mnoge zanimati. Ako želite da saznate više o tabletama za potenciju bez recepta u apotekama, obavezno posetite snaga u krevetu
Inspirador para cualquier inversor http://empresaboost.cavandoragh.org/tres-anos-de-desarrollo-en-el-ambito-fotovoltaico-alvaro-mata-de-jzi-celebra-la-venta-de-eliantus
This was nicely structured. Discover more at https://giphy.com/channel/gwrachylrs
This was very enlightening. For more, visit free video chat
This was a fantastic resource. Check out επισκευη παλαιων κουφωματων αλουμινιου for more
Having read this I thought it was extremely enlightening. I appreciate you spending some time and energy to put this content together. I once again find myself spending way too much time both reading and commenting. But so what, it was still worth it.
Dubai’s commitment to excellence extends to its helicopter tours, where attention to detail and exceptional service ensure that every passenger has an extraordinary experience helicopter scenic views
You can definitely see your skills within the article you write.
The world hopes for more passionate writers like you who aren’t afraid to
mention how they believe. All the time go after your heart.
Pucón es un destino que ofrece actividades para toda la familia. Hospedarse en una de las cabañas de https://www.bitsdujour.com/profiles/uQjghL te brindará un alojamiento cómodo y cercano a todo
This was very enlightening. For more, visit https://mssg.me/qouck
Interesante artículo sobre cómo las inmobiliarias como https://www.indiegogo.com/individuals/37964042 pueden ayudarnos a encontrar la casa de nuestros sueños
This was highly useful. For more, visit europa κουφώματα αλουμινίου
This blog post about hot air ballooning in Dubai has reignited my wanderlust balloon adventures dubai packages
Región con potencial para implementar estas tácticas. Ganancias
Discover the thrill of riding in a powerful ##jet car## as it zooms through the vibrant streets of Dubai dubai car jet ski
What a stuff of un-ambiguity and preserveness of precious knowledge concerning unexpected
feelings.
I found this very interesting. Check out κουφωματα αλουμινιου etem for more
Me encantaría visitar Pucón y hospedarme en una de esas hermosas cabañas. https://www.giantbomb.com/profile/cabanasangt/ definitivamente será mi elección
Hvala vam na deljenju ovih informacija o tabletama za potenciju bez recepta! Za pronalaženje najboljih proizvoda, preporučujem posetu prirodne tablete za muškarce
Great job! Find more at btnailsspa.com
Discover a new perspective on luxury as you soar above Dubai’s opulent resorts and extravagant developments on a private helicopter tour https://www.4shared.com/s/feciXd7fEge
This was a wonderful post. Check out https://dribbble.com/ipennyytnt for more
Thanks for the thorough analysis. Find more at ανταλλακτικα για κουφωματα αλουμινιου θεσσαλονικη
Me gustaría saber si https://cs.astronomy.com/members/inmobiliariassqio/default.aspx tiene alguna promoción especial en este momento
I enjoyed this article. Check out https://www.demilked.com/author/bandarvyou/ for more
The hot air balloon rides in Dubai are a perfect blend of adventure, serenity, and awe-inspiring views More help
Thanks for the helpful article. More like this at nail salon 77471
Thanks for the great tips. Discover more at dede4d
Las cabañas en Pucón ofrecen todas las comodidades necesarias para una estadía inolvidable https://peatix.com/user/23185249/view
Great article! We are linking to this great article on our website. Keep up the good writing.
Dubai helicopter tours provide an exclusive perspective of the Palm Jumeirah, Burj Al Arab, and Burj Khalifa https://list.ly/i/10027534
This was highly educational. More at iluma play
Hvala na ovim informacijama o tabletama za potenciju bez recepta! Da biste pronašli najbolje opcije, predlažem da posetite tablete za potenciju bez recepta u apotekama
This was very beneficial. For more, visit Fine Nails & Spa Orange
Me encanta cómo resaltan la importancia de contar con una buena inmobiliaria en el proceso de venta de una propiedad https://www.creativelive.com/student/noah-sorelli?via=accounts-freeform_2
Well explained. Discover more at https://www.gamespot.com/profile/malronmzzu/
슬롯사이트추천에서는 잭팟 제공을 통해 높은 수익을 얻을 수 있습니다 더 많은 정보를 얻기 위해 찾기
Si buscas un destino para relajarte y disfrutar de la naturaleza, Pucón es tu mejor opción. Reserva ahora en https://list.ly/javierpuvf y vive unas vacaciones inolvidables