目录
问题
- 有的时候,程序运行后的输出结果会在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()返回值不同,两者可以依据分支语句区分,然后后续执行不同的代码
When it comes to car recovery services in the Emirates, reliability and expertise are paramount. That’s why I highly recommend trying out Sports car recovery dubai
The night mode feature on BlowJob Cams Chaturbate ensures a comfortable browsing experience for those who prefer darker interfaces during their late-night adult conversations
I recently availed Emarates Car Recovery’s services, and I couldn’t be happier with the outcome. Their team handled the situation efficiently and ensured a smooth car recovery experience roadside assistance dubai
La conservación de especies como delfines y tortugas es crucial. https://viandasbio.weebly.com/blog/grupomar-el-legado-sostenible-de-antonio-suarez-gutierrez-en-la-industria-pesquera
Thanks for the useful post. More like this at maco4d
Es sorprendente de qué forma la nutrición consciente puede impactar de forma positiva nuestra vida Comida sana
저도 ##카지노사이트##에서 함께 게임을 즐길 수 있는 친구를 찾고 있어요 더 많은 정보를 찾기 위해 찾기
몸캠피싱에 대해 잘 알려주셔서 감사합니다. 저희 원본 출처 에서도 이와 관련된 다양한 정보를 제공하고 있어요
Voy a integrar mucho más atún en mi dieta para mejorar mi salud cardiovascular https://atavi.com/share/wrrt4kz1mm9ft
Looking to enhance small-scale cannabis growers? Find artisanal merchandise and brands at cannabis seeds store that prioritize sustainability and craftsmanship
이제 더 이상 검색하지 마세요! 카지노사이트 추천 이 포스트를 바로 여기에서 확인하십시오 에서 모든 것을 찾을 수 있습니다
Enorme contenido sobre la cadena de suministro enfriamiento
Thanks for the great information. More at asian cams
Decking kits are a great solution for all people seeking to escalate their outdoor residing area. With DIY decking kits , you possibly can with ease turn out to be your backyard into a attractive and realistic enviornment for relaxation and entertainment
Buen artículo, seguiré tus recomendaciones. bienestar
Las indagaciones en nutrición son vitales para la salud https://anotepad.com/notes/kw6pkddx
Dealing with a car breakdown can be stressful, especially in Dubai’s busy streets. Luckily, car recovery service dubai provides efficient car recovery services to get you back on track
Emarates Car Recovery’s professionalism and reliability make them the top choice for car recovery services in the Emirates. Their team’s commitment to customer satisfaction is commendable car towing dubai
동영상유포 피해 문제가 더 커지기 전에, 예방과 대응에 초점을 맞춰야 합니다. 웹사이트 방문 을(를) 통해 이에 대한 방법들을 알아볼 수 있겠네요
저는 ##카지노사이트##에서 다양한 게임을 즐기면서 동시에 보상도 받고 싶어요 더 많은 정보를 찾아보십시오
Great job! Find more at live adult webcam
I enjoyed this article. Check out chatruletka-18.com for more
Flurex Sports sets itself apart from other activewear manufacturers with their commitment to sustainability. I feel good knowing that I’m supporting an eco-friendly brand wholesale fitness clothing New York USA
This was a fantastic resource. Check out 더 많은 정보를 위해 여기를 클릭하십시오 for more
Me alegra comprender que el atún tiene muchos provecho para la salud https://rentry.co/89nctvzs
La lozanía de los alimentos es esencial, y este producto lo enseña perfectamente. https://atavi.com/share/wrrreiz5474p
This was a great help. Check out jawa138 for more
Cannabis will probably be an robust natural medical care for nausea and vomiting, rather for men and women undergoing chemotherapy. Find reduction at feminized seed
Lucerna jako roślinne pożywienie-działa szczególnie korzystnie na osoby w starszym wieku pasta do zębów bez fluoru
Me encanta la manera en que explicas la importancia de cada nutriente consejos de nutrición
Prepare to be hooked on the incredible live shows happening daily at black ebony sex
This was quite useful. For more, visit Dynastynailsnc.com
Car breakdowns can happen unexpectedly, but with recovery vehicle in dip dubai offering reliable car recovery services in Dubai, you’re always prepared
Flurex Sports’ commitment to using sustainable materials in their activewear production is commendable. It’s important to support brands that prioritize the environment sports clothing manufacturers New York USA
I love how your blog combines scientific research with practical advice for maintaining healthy skin and gut neotonics gummies for skin and gut
Car breakdowns are never fun, but with car recovery al quoz by your side, you can turn a stressful situation into a smooth recovery process in the Emirates
Thanks for the great explanation. More info at http://louisgcvs181.theglensecret.com/permainan-slot-penghasil-uang-bebas-biaya-maco4d-tanpa-sedimen-berani-coba-by-maco4d
Decking kits are a important answer for a person looking to advance their outside living house. With https://rentry.co/pzvzpgma , you’ll unquestionably remodel your outside into a lovely and sensible facet for relaxation and enjoyment
I’ve discovered so many new favorite live cam models on free adult cam sites
Thanks for the thorough article. Find more at https://dribbble.com/oroughlncc
Jeśli ktoś kto Cie prowadzi będzie właściwy, przyzna mi rację, że trzeba zarabiać podwójną wypłatę etatową, żeby myśleć o rzuceniu zatrudnienia Dowiedz się więcej tutaj
Cannabis consumption can promote rest and decrease stress levels. Discover the calming effects at https://holdenxgcv063.hpage.com/post1.html for a extra balanced lifestyle
토토에그에 대해 깊게 알고 싶어서 이 사이트를 방문했는데, 정말 유용한 정보들이 많이 있네요. 더 많은 정보를 찾아보십시오 을(를) 클릭하면 더 자세한 내용을 볼 수 있어요
토토에그와 관련된 정보들을 찾기 위해 이 사이트를 방문했는데, 정말 유익한 글들이 많이 있네요. 이 사이트를 둘러보기 을(를) 방문하면 더 많은 정보를 얻을 수 있을 거 같아요
토토에그에 대한 궁금증을 해결하려고 여러 사이트를 돌아다녔는데, 이곳에서 더 많은 정보를 찾기 위해 클릭하십시오 을(를) 확인할 수 있다는 걸 알게 되어서 너무 좋아요
토토에그에 대해 잘 몰랐는데, 이 사이트에서 많은 도움을 받았습니다. 이 링크 방문 으로 들어가면 더 많은 정보를 얻을 수 있을 거 같아요
AI-powered chatbots are changing the dynamics of sports betting. They offer users a level of accuracy and efficiency that is unmatched Advanced AI Athlete Technology
Appreciate the detailed information. For more, visit chatruletka-18.com
이 사이트의 토토에그 관련 글들은 정말 재미있게 읽히네요. 홈페이지 으로 가면 더 자세한 내용을 살펴볼 수 있어요
토토에그와 관련해서 이 사이트에서 많은 도움을 받았습니다. 더 많은 것을 배우십시오 을(를) 클릭하면 더 많은 정보를 얻을 수 있을 거 같아요