目录
问题
- 有的时候,程序运行后的输出结果会在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()返回值不同,两者可以依据分支语句区分,然后后续执行不同的代码
Me encanta la idea de tener un hogar más eficiente energéticamente y estos trucos me darán el impulso necesario para lograrlo Tecnología
Gracias por brindar una guía tan detallada y útil sobre cómo elegir el fondo de inversión perfecto para mi empresa en 2024 Rendimiento
Very informative article. For similar content, visit babish knife review
Me gustaría aprender más sobre la distribución de hidrocarburos y este enlace parece ser muy útil Transporte marítimo
This was a wonderful post. Check out follow this link for more
¡Gracias por compartir estos consejos para reducir la factura de electricidad! Definitivamente los pondré en práctica en mi hogar http://windforce.fotosdefrases.com/energia-solar-una-opcion-rentable-y-sostenible-para-reducir-tu-factura-de-electricidad-de-forma-ecologica
Great post. I am experiencing many of these issues as well..
Excelente información sobre las innovaciones en el suministro de energía. Estoy emocionado de ver cómo estas ideas se implementan y cómo puedo contribuir a través de mi propio consumo responsable Eólica
Appreciate the useful tips. For more, visit αναδιπλουμενα κουφωματα αλουμινιου
Your website’s detailed descriptions and stunning photos have me convinced that a dunebuggyadventure is a must-do experience morning desert safari dubai
Me gustaría aprender más sobre las soluciones innovadoras que ofrece Desarrollo de oportunidades en el sector fotovoltaico y cómo puedo beneficiarme de ellas
Felicidades por el contenido bien estructurado y fácil de seguir sobre la distribución de hidrocarburos en este blog Soluciones logísticas
Ahorrar energía es clave para tener un hogar eficiente. Estos consejos me ayudarán a reducir mi factura de electricidad y contribuir al cuidado del planeta https://papaly.com/3/agVe
I was able to find good information from your content.
Estoy emocionado de aplicar los consejos que compartes en esta guía al seleccionar el fondo de inversión perfecto para mi negocio en 2024 Estrategias
This was quite informative. For more, visit wasim συστήματα κουφωμάτων αλουμινίου
Appreciate the comprehensive advice. For more, visit https://escatter11.fullerton.edu/nfs/show_user.php?userid=6607344
This was quite helpful. For more, visit babish knife review
Este artículo me ha dado una visión clara de cómo podemos avanzar hacia un suministro de energía más sostenible. Estoy emocionado de aprender más sobre las innovaciones mencionadas y ver cómo puedo implementarlas en mi vida diaria Eólica
Hello, I think your website could be having browser compatibility problems. Whenever I take a look at your web site in Safari, it looks fine however when opening in Internet Explorer, it’s got some overlapping issues. I merely wanted to provide you with a quick heads up! Apart from that, fantastic website.
El teletrabajo es una modalidad laboral que ha llegado para quedarse. Gracias por compartir tus conocimientos y por mencionar a Mira aquí como una plataforma confiable para implementarlo con éxito
Felicidades por el contenido detallado y preciso sobre la distribución de hidrocarburos en este sitio web Servicios aduanales
I couldn’t refrain from commenting. Very well written!
I enjoyed this post. For additional info, visit κουφώματα πλαστικά ή αλουμινίου
¡Bravo por resaltar las innovaciones en el suministro de energía! Este artículo es muy informativo y me ha inspirado a ser más consciente de mi propio consumo energético http://sunvolt.timeforchangecounselling.com/fuentes-de-energia-limpia-el-camino-hacia-un-planeta-mas-sostenible
I enjoyed this post. For additional info, visit https://hackerone.com/launusipmd38
Felicidades por el contenido detallado y preciso sobre la distribución de hidrocarburos en este sitio web Soluciones logísticas
This was very enlightening. More at babish knife review
An impressive share! I’ve just forwarded this onto a friend who was conducting a little homework on this. And he in fact bought me breakfast simply because I stumbled upon it for him… lol. So allow me to reword this…. Thanks for the meal!! But yeah, thanx for spending the time to talk about this matter here on your blog.
Ahorrar energía es algo que todos deberíamos hacer para cuidar del medio ambiente. Estos consejos me ayudarán a lograrlo y reducir mi factura de electricidad Recursos adicionales
Me encanta cómo este artículo enfatiza la necesidad de adoptar innovaciones en el suministro de energía para un futuro más verde y eficiente. Estoy emocionado de ver cómo estas ideas se implementarán en nuestra sociedad Eficiencia
Este sitio web ha respondido todas mis dudas sobre la distribución de hidrocarburos Echa un vistazo a este sitio web
Appreciate the useful tips. For more, visit Informative post
Me gusta cómo abordas el tema de la gestión del cambio en el ámbito empresarial en tus artículos Servicio Secreto
Me encanta la idea de tener un hogar más eficiente energéticamente. Estos trucos me ayudarán a lograrlo y reducir mi factura de electricidad Mira este sitio
Estoy impresionado por la cantidad de innovaciones que se están llevando a cabo en el suministro de energía. Este artículo ha ampliado mi conocimiento sobre el tema y estoy emocionado de ver cómo puedo contribuir también Verde
This is the right web site for anyone who wants to find out about this topic. You understand so much its almost tough to argue with you (not that I really would want to…HaHa). You definitely put a new spin on a topic that’s been discussed for many years. Great stuff, just great.
Appreciate the thorough analysis. For more, visit https://www.empowher.com/user/4341681
This blog was… how do I say it? Relevant!! Finally I’ve found something which helped me. Thank you!
I enjoyed this article. Check out get more info for more
Hi, I do believe this is a great blog. I stumbledupon it 😉 I will revisit yet again since I book-marked it. Money and freedom is the best way to change, may you be rich and continue to help other people.
This was quite helpful. For more, visit babish knife review
Thanks to desert safari dubai tickets , I experienced the ultimate dune buggy adventure of a lifetime! Absolutely loved every moment of it
Me encanta cómo abordas el tema del emprendimiento social en tu blog empresarial Tumor cerebral pediátrico
The combination of adrenaline, stunning landscapes, and the desert breeze make ATV rides in Dubai an unforgettable experience dubai dune buggy tours
Los consejos de https://raindrop.io/beleifplqk/bookmarks-46138251 han sido una guía invaluable para mí como emprendedor
Rockingham is a beautiful place to Are living! Have you ever regarded as enhancing your property’s stability and aesthetics with a quality fencing Alternative? Look at https://500px.com/p/bitvalleyhallmarkaustralasiaofqqg for the most effective fencing solutions in town
This website was… how do you say it? Relevant!! Finally I have found something which helped me. Cheers!
I highly recommend alpha shipping for their exceptional maritime shipping services – you won’t be
Nunca había considerado cómo pequeños cambios pueden marcar una gran diferencia en mi consumo de electricidad. Gracias por las recomendaciones Termostato