c/c++ 多进程 fork函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c/c++ 多进程 fork函数相关的知识,希望对你有一定的参考价值。

1 #include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4
5 int main()
6
7 pid_t pid1,pid2;
8
9 pid1=fork();
10
11 pid2=fork();
12
13 printf("hellow world!\n");
14
~
这段代码如果该为
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4
5 int main()
6
7 pid_t pid1,pid2;
8
9 pid1=fork();
10
11 if(pid>0) pid2=fork();
12
13 printf("hellow world!\n");
14
~ 这两代码为什么会产生不同的执行结果?谢谢!

fork()函数会有两个返回值,在主进程会返回子进程的pid,在子进程会返回0,所以,如果判断返回值大于0,即是在主进程。
第一个是主进程子进程执行完全一样的代码,fork一个子进程,所以会输出4个hello。
第二个在第一次fork完毕后只有主进程会fork一个子进程,所以会输出3个hello。
参考技术A 第一个例子里,第一个fork会出来一个子进程(共有2个进程),第二个fork会在这两个进程里面都创建子进程(结果共有4个进程),输出4次hello
第一个例子里,第一个fork会出来一个子进程(共有2个进程),第二个fork前有pid>0判断,所以只会在主线程里面都创建子进程(结果共有3个进程),输出3次hello本回答被提问者采纳
参考技术B 你的pid是什么?

以上是关于c/c++ 多进程 fork函数的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程控制

为啥在调用 c++ fork 函数之前创建的值没有被父进程和子进程修改两次?

linux C语言 clone() 和 fork() 的区别,fork函数的用法,主要应用场景(clone是fork的升级版本,可以将创建出来的进程变成父进程的兄弟进程)

linux C/C++多进程教程(多进程原理以及多进程的应用以多连接socket服务端为例(fork子进程处理socket_fd),同时介绍了僵尸进程产生原因与解决方法)(getpidfork)

子进程是否从 Fork 函数 后 开始执行,执行函数后的代码。Fork函数之前的不执行?

在 C 编程中,如何 fork() 在子进程中运行 N 个函数调用?