当前位置:网站首页>fork创建多个子进程
fork创建多个子进程
2022-08-09 11:03:00 【XV_】
references:
[1] how to create two processes from a single Parent
[2] fork() in C
[3] linux中fork同时创建多个子进程的方法
fork的本质,就是复制,把当前进程复制一份,然后两个进程并发地执行fork后面的语句,区别就是,子进程的fork返回值是0,父进程的fork返回值是子进程的pid,这也是区分父进程和子进程的方法,至于其他的内容,在fork之前的东西两个进程的一样的。
给出一个父进程和一个子进程的模板
int fd = fork();
if(fd < 0){
exit(1);
} else if(fd == 0){
// child code
} else {
// father code
}
对于创建1个父进程和2个子进程,也是一样的道理
int fd1,fd2;
fd1 = fork();
if(fd < 0){
exit(1);
} else if(fd == 0){
// child1 code
} else {
fd2 = fork();
if(fd2 < 0){
exit(1);
} else if(fd2 == 0){
// child2 code
} else {
// father code
}
}
先创建子进程1,然后父进程再继续执行,创建子进程2,最后,3个进程能够在框架内执行自己的代码。
这是最好用的框架,能够将3个进程都识别和区分开,不过如果创建n个子进程就会很麻烦。
因此,根据不同需求,也可以有别的写法
for(int i = 0; i < n; i++){
int fd = fork();
if(fd < 0){
exit(1);
} else if(fd == 0){
// child i code
break;
} else {
// father code
}
}
最大作用的是break,保证子进程不会再进一步创建子进程。
然后其实子进程就可以干自己的事情了,比如执行个exec family,执行其他进程什么的。
另外值得一说的是,如果父进程没有等待子进程结束之后再结束的话,shell就会出现显示错乱。
就像下面这样,但是仅仅是显示错乱而已,你可以直接正常输入命令的。
reference
[1] Using fork() in simplest form need to hit enter to finish execution
[2] Why do shells call fork()?
至于为什么,那是因为,当shell执行命令的之后,也会先创建一个子shell,然后执行exec,再执行你想要执行的命令,执行结束后,再返回当前的shell。
我们用shell执行了父进程,结束后返回,就显示[email protected]:$了,而子进程仍然在执行,并且向shell输出了child process,所以就造成了上面的局面,但是仅仅是显示问题而已,正常向shell输入命令就好。
边栏推荐
猜你喜欢
随机推荐
Preparation for gold three silver four: how to successfully get an Ali offer (experience + interview questions + how to prepare)
美的数字化平台 iBUILDING 背后的技术选型
FreeRTOS任务创建源码分析
遇到恶意退款不用怕,App 内购买项目的退款通知现已可用
激光条纹中心提取——灰度重心法
golang源代码阅读,sync系列-Pool
Netscope: Online visualization tool for neural network structures
MDK添加注释模板
商业技术解决方案与高阶技术专题 - 数据可视化专题
golang源代码阅读,sync系列-Cond
PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization Paper Reading
MATLAB代码实现三次样条插值
The torch. The stack () official explanation, explanation and example
绝了,这套RESTful API接口设计总结
kubernetes中不可见的OOM
Tensorflow realize parameter adjustment of linear equations
人物 | 从程序员到架构师,我是如何快速成长的?
二叉树 前序是根在前(根左右)中序(左根右)
备份mongodb数据库(认证)
彻底理解工厂模式









