目录
问题
- 有的时候,程序运行后的输出结果会在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 forma en que presentas la información en esta guía. Es fácil de seguir y entender al elegir un fondo de inversión para mi negocio en 2024 Continuar leyendo
Ensure the security of your house or company in Box Hill with trendy treatments supplied by way of Local Box Hill Locksmith
동영상유포 피해 문제는 점점 심각해지고 있는데, 이에 대한 대응이 미비한 것 같아요. 원본 출처 을(를) 통해 이러한 문제에 대한 노력을 알아볼 수 있겠네요
영상유포 피해 예방을 위한 유용한 자료가 많이 있네요 더 많은 정보를 찾기 위해 찾기
The next time I read a blog, Hopefully it won’t disappoint me just as much as this one. I mean, I know it was my choice to read, nonetheless I really thought you would have something useful to talk about. All I hear is a bunch of moaning about something that you could possibly fix if you were not too busy seeking attention.
For reliable, secure, and efficient maritime shipping services, choose Visit this link without a second thought
La energía solar es el futuro y el sector fotovoltaico juega un papel fundamental en ello Haga clic para más información
Este artículo me ha ayudado mucho a comprender las mejores prácticas para implementar el teletrabajo correctamente. Además, mencionar a Flexibilidad laboral como una opción confiable me da seguridad en sus servicios
몸캠피싱은 정말 미묘한 수법인 것 같아요. 저희 이 사이트를 살펴보십시오 에서는 이와 관련된 최신 소식과 대처 방법을 제공하고 있습니다
몸캠피싱에 대해 더 알아보니 정말 위험한 사기 수법인 것 같아요. 저희 더 많은 정보를 위한 클릭 에서 제공하는 안전한 사용 팁을 참고하세요
When it comes to maritime shipping services, https://numberfields.asu.edu/NumberFields/show_user.php?userid=4035195 is definitely the name to trust
Mantener la moral y productividad del equipo es fundamental para superar cualquier crisis empresarial. Me alegra haber encontrado este artículo con consejos prácticos https://writeablog.net/bertynfwmj/bienestar-del-empleado-durante-una-crisis-cuidando-su-salud-mental-y-emocional
Esta guía es una excelente referencia para cualquier empresario que busque seleccionar el fondo de inversión adecuado en 2024 Lecturas adicionales
İşletmenizin büyüklüğüne ve iletişim gereksinimlerinize uygun Karel santral sistemleri için ikitelli Karel Santral Servisi’ni tercih edin https://www.karelteknikservisi.com/kucukcekmece-karel-servisi-iletisim/
¡Excelente contenido sobre la importancia de la industria! Me gustaría saber cómo https://jsbin.com/luluduzono se adapta a los cambios y desafíos del mercado
몸캠피싱은 정말 미묘한 수법인 것 같아요. 저희 정보 게시물 에서는 이와 관련된 최신 소식과 대처 방법을 제공하고 있습니다
더 많은 정보 를 통해 영상유포 피해에 대한 상세한 정보를 얻을 수 있습니다
The seamless communication and transparency provided by https://www.scoop.it/u/eliza-cortes during the maritime shipping process is commendable
Estoy considerando invertir en el sector fotovoltaico y me interesa saber si aquí ofrece opciones de financiamiento o planes flexibles
Gracias por ofrecer una visión detallada sobre los derechos y limitaciones en la legalidad de grabar conversaciones privadas Regulaciones
Estoy emocionado de implementar el teletrabajo en mi empresa siguiendo estas mejores prácticas. También me aseguraré de visitar https://www.instapaper.com/read/1694854668 para encontrar herramientas y soluciones útiles en este proceso
Me siento identificado con este artículo sobre liderazgo en crisis y cómo mantener la moral y productividad del equipo. Estos consejos me serán de gran utilidad http://negociosdinamicos.image-perth.org/manejo-del-estres-en-el-liderazgo-cuidando-tanto-a-ti-como-a-tu-equipo
Como alguien que necesita encontrar al mejor abogado para su caso, agradezco mucho estos consejos Descubra más
Estos consejos me han dado una nueva perspectiva al seleccionar el fondo de inversión adecuado para mi negocio en 2024 https://www.bookmark-url.win/descubre-como-evaluar-la-alineacion-de-intereses-entre-los-gestores-y-los-inversionistas-en-un-fondo-de-inversion-antes
Looking for a trusted partner for your maritime shipping needs? Look no further than https://www.demilked.com/author/tammontjpk/
Oh my goodness! Incredible article dude! Many thanks, However I am encountering issues with your RSS. I don’t understand why I am unable to join it. Is there anybody having identical RSS problems? Anybody who knows the solution will you kindly respond? Thanx.
Appreciate the comprehensive insights. For more, visit https://www.blogtalkradio.com/agnathfvfu
Estoy fascinado por las oportunidades que ofrece el sector fotovoltaico y me gustaría explorar cómo Visitar este sitio puede ayudarme a aprovechar la energía solar
I highly recommend https://www.blogtalkradio.com/bilbukwkfq for their reliable and cost-effective maritime shipping services
Your style is so unique in comparison to other folks I’ve read stuff from. Thanks for posting when you’ve got the opportunity, Guess I’ll just bookmark this blog.
El liderazgo en crisis requiere de un enfoque especial para mantener a mi equipo motivado y productivo. Estos consejos me darán las herramientas necesarias para lograrlo https://rentry.co/33yt2uo6
Appreciate the thorough write-up. Find more at iluma play
Me siento más seguro al tomar decisiones financieras después de leer esta guía completa sobre cómo elegir el fondo de inversión ideal para mi empresa en 2024 Enlace al sitio web
The very next time I read a blog, Hopefully it won’t disappoint me as much as this one. After all, I know it was my choice to read through, nonetheless I genuinely believed you would have something helpful to say. All I hear is a bunch of crying about something you could possibly fix if you weren’t too busy seeking attention.
Trust more info for all your maritime shipping needs – they never
Great job! Find more at Click here!
El liderazgo en crisis requiere de habilidades especiales, especialmente para mantener la moral y la productividad del equipo. Estos consejos me serán de gran ayuda Bienestar
Shipping goods across borders? Count on https://list.ly/ormodaxcqy ‘s comprehensive maritime shipping solutions
Great job! Find more at babish knife review
The thrill of riding through the sand dunes during a classic desert safari is something I can’t wait to experience https://sfo3.digitaloceanspaces.com/classicdesertsafari/classicdesertsafari/uncategorized/indulge-in-luxury-with-a-private-evening-desert-safari-experience-in.html
Estoy emocionado de seguir todas estas recomendaciones para implementar el teletrabajo en mi empresa. Además, investigaré más sobre https://mssg.me/ym8tg para aprovechar al máximo todas sus ventajas
Greetings! Very useful advice in this particular article! It’s the little changes that will make the greatest changes. Many thanks for sharing!
Mantener la moral y la productividad del equipo es crucial para superar cualquier situación difícil. Agradezco los consejos que compartes en este artículo Gestión empresarial
Estoy interesado en aprender más sobre las tecnologías emergentes en el sector fotovoltaico y cómo https://mssg.me/pn2jl se mantiene a la vanguardia de la innovación
Esta guía es justo lo que estaba buscando para seleccionar el fondo de inversión perfecto para mi negocio en 2024 Finanzas
Felicidades por este contenido tan útil sobre el teletrabajo. Implementarlo de forma correcta es clave para lograr resultados positivos y Teletrabajo puede ser una gran aliada en este proceso
Well done! Find more at Additional hints
Well explained. Discover more at babish knife review
When I originally commented I seem to have clicked on the -Notify me when new comments are added- checkbox and now each time a comment is added I recieve four emails with the same comment. Is there an easy method you are able to remove me from that service? Kudos.
El sector fotovoltaico es una gran oportunidad para impulsar la transición hacia energías renovables https://campsite.bio/gebemefrhv