当前位置:网站首页>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输入命令就好。
边栏推荐
- 1003 Emergency (25分)
- centos7.5 设置Mysql开机自启动
- vite的原理,手写vite
- 聚类了解
- 使用.NET简单实现一个Redis的高性能克隆版(四、五)
- faster-rcnn学习
- Preparation for gold three silver four: how to successfully get an Ali offer (experience + interview questions + how to prepare)
- 美的数字化平台 iBUILDING 背后的技术选型
- tensorflow和numpy对应的版本,报FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecate
- leetcode-搜索旋转排序数组-33
猜你喜欢
随机推荐
基于STM32设计的环境检测设备
uni-app 自带的picker封装一个日期-时间选择器
MATLAB中如何把cftool拟合的函数输出到命令行(解决如何导出拟合后的曲线数据)
Mysql多表查询
faster-rcnn中的RPN原理
【VIBE: Video Inference for Human Body Pose and Shape Estimation】论文阅读
Solve 1. tensorflow runs using CPU but not GPU 2. GPU version number in tensorflow environment 3. Correspondence between tensorflow and cuda and cudnn versions 4. Check cuda and cudnn versions
PTA 换硬币
golang 三种指针类型具体类型的指针、unsafe.Pointer、uintptr作用
String类型的字符串对象转实体类和String类型的Array转List
golang源代码阅读,sync系列-Pool
sublime记录
For versions corresponding to tensorflow and numpy, report FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecate
matlab fcnchk 函数用法
golang源代码阅读,sync系列-Cond
Netscope: Online visualization tool for neural network structures
解决1.tensorflow运行使用CPU不使用GPU 2.tensorflow环境下的GPU版本号 3.tensorflow和cuda以及cudnn版本对应问题 4.查看cuda和cudnn版本
matlab图像分割,从基因芯片荧光图像中提取阴性点(弱)和阳性点(强)
PTA习题 分类统计字符个数(C)
PTA 矩阵运算