如何创建fork子进程的过程 举例,创建一个子进程 子进程执行过程 父子进程执行顺序和结果

多进程编程---创建进程

头文件:#include<unistd.h>

创建一个新进程 :pid_t fork(void)   

如果出错返回-1

fork 调用一次,两次返回,原来的进程返回新进程的pid(父进程)

                                            新进程中返回0(子进程)

(一)、举例,创建一个子进程,代码如下

运行结果:if 和 else 都执行,其中,子进程执行 if 语句,父进程执行 else 语句

 父进程中返回进程pid,系统并没有提供一种手段来获取父进程的所有子进程,只有在创建时,才知道创建的是哪个子进程

子进程中返回0:系统提供了getpid()获取某父进程的pid,而且进程号为0是一个系统创建的子进程pid不可能为0(之所以为0是因为fork()之后,父子进程谁先执行,由系统当前环境以及进程调度算法来决定)

(二)、子进程执行过程

如图所示:子进程从fork往下执行

举例:在for循环里fork一个进程

结果分析:i=0 时,子进程A执行 if 语句,父进程执行else语句

                  i=1 时, 此时for循环是子进程A没有影响的,因为没有读到,这时子进程A已结束,父进程再重新往下面走,读到fork时又生成了一个子进程B,子进程B执行 if 语句,父进程又执行了一次 else 语句

(三)fork()父子进程执行顺序和结果

并发:交替运行

并行:同一时刻,两个或多个都在执行

父子进程并发运行

举例:

下面来写一个代码演示一下父子进程并发运行的结果

(在上一篇博客中提到过缓冲区输出条件,与上一个例子不同的是我把“\n”去掉了,让程序在结束时输出

运行结果:可以看得出父子进程的运行顺序改变了,这取决于系统当前环境以及进程调度算法

有些人每次的执行结果是一样的,这是因为处理器只有一个,相当于每次都只能执行一个程序

可以通过下面的选项来设置,我这里设置的是4个处理器

猜你喜欢

转载自blog.csdn.net/obitosbb/article/details/90987751
今日推荐