当前位置: 首页 > ai >正文

Linux中的fork详解

1、fork与execl

        fork是产生一个新的进程,底层原理调用的是系统调用的clone函数,创建了新的PCB(进程控制块),而execl是一个程序替换函数,是将其调用位置之后的程序代码全部替换为目标代码,当前进程的PCB并不会退出

2、fork后,子进程保留了父进程的什么?

        子进程保留了父进程的环境变量和当前路径,但是信号相关以及进程号并不会被继承,这些都是进程间独立互不影响的东西

3、pid_t waitpid(pid_t pid, int* status, int options)

        pid=0时,表示等待指定的子进程退出;pid=-1时,表示等待任意的子进程退出;第二个参数用来接受退出码,是一个输出型参数;而options,常用的一个选项是WNOHANG,表示父进程在子进程退出以前不处于阻塞状态

        waitpid默认是阻塞等待指定进程或者任意进程退出,而使用选项WNOHANG时,父进程不会阻塞,即使最后也没有子进程退出,也不会报错,返回值为0

4、exit与_exit

        两者都会让当前进程直接退出,但是在文件缓冲区的处理上有所差别:前者是先刷新文件缓冲区,再退出进程;后者是直接释放所有资源,不刷新文件缓冲区,直接退出

5、fork创建子进程的理解

基于以下代码判断除了主进程,一共创建了多少个进程?

int main()
{
fork();
fork()&&fork()||fork();
fork();
return 0;
}

一共有19个

这里我们对五个fork函数分别编号为1、2、3、4、5(将在n号fork创建的进程都成为pn)

在运行到一号fork时,创建了p1;主进程和p1运行到二号fork时,两者都创建了p2(两个p2);但是这时,主进程和p1可以执行三号fork创建了p3(两个)而两个p2因为二号fork时接受的返回值为0,所以不能执行3号fork;在运行到四号fork的时候,主进程和p1已经不能再执行4号fork,而其他的进程(两个p2和两个p3各创建一个p4);现在已经有了10个进程,他们再在5号fork出各产生一个p5这样总共就有10 * 2 = 20个进程,而我们又不算主进程,所以一共有19个进程被创建。                        

http://www.xdnf.cn/news/20015.html

相关文章:

  • 好看的背景颜色 uniapp+小程序
  • vue3+ts导出PDF
  • 力扣55:跳跃游戏
  • 每周资讯 | 中国游戏市场将在2025年突破500亿美元;《恋与深空》收入突破50亿元
  • 52核心52线程,Intel下一代CPU憋了个大的
  • uni-app 项目 iOS 上架踩坑经验总结 从证书到审核的避坑指南
  • 一文从零部署vLLM+qwen0.5b(mac本地版,不可以实操GPU单元)
  • 为什么要用VR全景?5个答案告诉你
  • 用户眼中的VR自来水厂之旅
  • 【Android】Room数据库的使用
  • Linux系统TCP/IP网络参数优化
  • 在Unity中实现DTLN-AEC处理音频文件的功能
  • 【论文阅读】Security of Language Models for Code: A Systematic Literature Review
  • 深度学习篇---pytorch数据集
  • 【Python】数据可视化之核密度
  • 【RNN-LSTM-GRU】第二篇 序列模型原理深度剖析:从RNN到LSTM与GRU
  • 关于Spring的八股
  • vector 题目练习 算法代码分析 代码实现
  • 鸿蒙NEXT交互机制解析:从输入设备到手势响应的全面指南
  • 深度学习-----修改学习率来优化模型的几个方法
  • redis的hash表如何扩容
  • Web与Nginx网站服务
  • 2025数学建模国赛高教社杯A题思路代码文章助攻
  • 【CS32L015C8T6】配置单片机PWM输出(内附完整代码及注释)
  • rh134第二章复习总结
  • 0904 类的继承
  • 【前端:Html】--5.进阶:APIs
  • 遇享会—金湾读书会—第四期—你好,陌生人——20250823
  • 【FPGA】单总线——DS18B20
  • 单向链表的一些基本操作(Java)