References:

  1. c语言fork函数
  2. linux中fork()函数详解

一、fork函数简介

  1. 作用

在linux下,C语言创建进程用fork函数。fork就是从父进程拷贝一个新的进程出来,子进程和父进程的进程ID不同,但用户数据一样。fork函数被父进程调用一次,但是却返回两次;一次是返回到父进程,一次是返回到新创建的子进程。

  1. 父进程和子进程的区分

执行fork函数后有2种返回值:对于父进程,返回的是子进程的PID(即返回一个大于0的数字);对于子进程,则返回0,所以我们可以通过pid这个返回值来判断当前进程是父进程还是子进程。

二、创建一个子进程的示例

  • 程序代码:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[]){
printf("Before fork!\n");
pid_t pid = fork();
printf("pid value: %d\n", pid);
printf("After fork!\n");
if(pid > 0){
printf("Parent process, pid: %d\n", getpid());
}else if(pid == 0){
printf("Child Process, pid: %d, parent pid: %d\n", getpid(), getppid());
}else{
printf("Fork failed!\n");
}
printf("Process end!\n");
sleep(1);
return 0;
}
  • 对应输出:

三、循环创建子进程

1.以下方式将创建7个子进程

  • 程序:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[]){
printf("Before fork!\n");
pid_t pid;
for(int i = 0; i < 3; i++){
pid = fork();
}
printf("pid value: %d\n", pid);
printf("After fork!\n");
if(pid > 0){
printf("Parent process, pid: %d\n", getpid());
}else if(pid == 0){
printf("Child Process, pid: %d, parent pid: %d\n", getpid(), getppid());
}
printf("Process end!\n");
sleep(1);
return 0;
}
  • 运行结果:

创建了7个子进程

  • 图解如图所示:

2.如何循环三次得到三个子进程?

  • 不让子进程fork出新的子进程。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[]){
printf("Before fork!\n");
pid_t pid;
for(int i = 0; i < 3; i++){
pid = fork();
if(pid == 0) break;
}
printf("pid value: %d\n", pid);
printf("After fork!\n");
if(pid > 0){
printf("Parent process, pid: %d\n", getpid());
}else if(pid == 0){
printf("Child Process, pid: %d, parent pid: %d\n", getpid(), getppid());
}
printf("Process end!\n");
sleep(1);
return 0;
}
  • 运行结果:

创建了3个子进程

C语言linux系统fork函数的更多相关文章

  1. Linux环境fork()函数详解

    Linux环境fork()函数详解 引言 先来看一段代码吧, 1 #include <sys/types.h> 2 #include <unistd.h> 3 #include ...

  2. [转帖]Linux下fork函数及pthread函数的总结

    Linux下fork函数及pthread函数的总结 https://blog.csdn.net/wangdd_199326/article/details/76180514 fork Linux多进程 ...

  3. 【转】linux 中fork()函数详解

    在看多线程的时候看到了这个函数,于是学习了下,下面文章写的通俗易懂,于是就开心的看完了,最后还是很愉快的算出了他最后一个问题. linux 中fork()函数详解 一.fork入门知识 一个进程,包括 ...

  4. linux中fork()函数

    man fork: FORK() Linux Programmer's Manual FORK(2) NAME fork - create a child process SYNOPSIS #incl ...

  5. linux的fork函数

       fork函数  头文件:#include<unistd.h> 函数原型:pid_t fork( void);(pid_t 是一个宏定义,其实质是int 被定义在#include< ...

  6. linux中fork函数详解(转)

    add by zhj: 在Linux,创建进程是用fork(),它其实就是拷贝父进程的数据段和其它数据,这相当于C函数调用中的值传递,这是 此后两者的修改都互不影响.因为两者的数据虽相同,但却在不同的 ...

  7. 知识点查缺补漏贴02:Linux环境fork()函数详解

    引言 先来看一段代码吧, #include <sys/types.h> #include <unistd.h> #include <stdio.h> #includ ...

  8. Linux中fork()函数详解(转载)

    linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

  9. Linux中fork()函数详解(转)

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  10. Unix/Linux系统时间函数API

    首先说明关于几个时间的概念: 世界时:起初,国际上的标准时间是格林尼治标准时间,以太阳横穿本初子午线的时刻为标准时间正午12点.它根据天文环境来定义,就像古代人们根据日晷来计时一样,如下图: 原子时: ...

随机推荐

  1. SQLServer的操作以及一些概念

    初始SQLServer 创建数据库 create database 数据库名 创建表 选择数据库 USE MyDb; 创建表 CREATE TABLE t_user ( id INT, usernam ...

  2. Zabbix 5.0 LTS URL 健康监测

    更多细节详情看[zabbix官方文档] 需求 Zabbix 的URL健康监测功能允许你检测 Web 地址是否可用.正常工作以及响应速度.这对于监控网站的可用性和性能非常有用.例如,你可以监控公司网站. ...

  3. MES 与 PLC 的几种交互方式

    在 MES 开发领域,想要从 PLC 获取数据就必须要和 PLC 有信号交互.高效准确的获取 PLC 数据一直是优秀 MES 系统开发的目标之一.初涉相关系统开发的工程师往往不能很好的理解 PLC 和 ...

  4. PHP现代化构建工具: 无需修改任何代码和扩展将你的ThinkPHP项目性能提高20倍

    我要分享一个令人激动的黑科技:PRipple 使用这个项目能够在无需修改任何代码且无需第三方扩展的前提下,将你的 Laravel 项目性能提高 20 倍.他仅仅依赖于PHP原生的 pcntl/posi ...

  5. linux的一些常用端口

    hdfs:9870 yarn:8088 sparkMaster的端口是:8080 worker的端口是:8081 历史服务器的默认端口是: 18080

  6. 【VMware】 桥接网路发现无法Ping通原因

    解决方案参考: https://blog.csdn.net/weixin_33856370/article/details/92420910 设置好的同网段的三台虚拟机这次开机连不上网了 仔细发现VM ...

  7. 【SpringBoot】14 数据访问P2 整合Druid数据源

    [SpringBoot引入Druid数据源] 在整合Jdbc的工程基础上加入这个依赖 并注册一个配置类即可 maven坐标: <!-- https://mvnrepository.com/art ...

  8. Rust项目的代码组织

    学习一种编程语言时,常常优先关注在语言的语法和标准库上,希望能够尽快用上新语言来开发,我自己学习新的开发语言时也是这样. 不过,想用一种新的语言去开发实际的项目,或者自己做点小工具的话,除了语言本身之 ...

  9. 关于工业AI辅助制造(模具设计、模样生产制造环节)

    关于工业AI辅助制造(模具设计.模样生产制造环节) AI技术的具体使用场景: AI辅助模具设计: AI辅助模具安装工艺参数调整. 具体方案设想: AI辅助模具设计: 使用AI大模型对历史已有的设计方案 ...

  10. 读论文《Distilling the Knowledge in a Neural Network》——蒸馏网络 —— 蒸馏算法 —— 知识蒸馏 中的温度系数到底怎么用, temperature怎么用?

    论文地址: https://arxiv.org/pdf/1503.02531.pdf 蒸馏网络的重要公式: 其中,\(p^g\)为Teacher网络,\(q\)为Student网络. 个体神经网络(C ...