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

Linux——fork复制进程

1)shell:


在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

 

 我们就是通过命令解释器(称为shell)(bash是命令解释器中的一种)和内核和系统进行交互的(Windows通过图形界面进行交互的);例如我们把ls交给bash,bash帮我们运行ls,然后把结果给用户;

2)fork如何复制进程?


fork是把已有的进程复制一份,当然把PCB也复制了一份,然后申请一个PID,子进程的PID=父进程的PID+1;

     如果父子进程想要做不同的事情,那么我们通过返回值来判断; man fork
代码如下(代码下去自己练习,理解):

#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <stdlib.h>int main()
{char *s=NULL;int n=0;//控制父子进程执行的次数;pid_t id=fork();assert(id!=-1);if(id==0)//子进程{s="child";n=3;}else//父进程{s="parent";n=7;}//父子进程int i=0;for(;i<n;i++){printf("s=%s\n",s);sleep(1);}exit(0);
}

父子进程是两个独立的进程,各自执行各自的代码;如果父子进程要做不一样的事情,就通过if  else返回值来操作;


3)fork的时机


fork产生的这个子进程不是从头开始执行的,而是从fork之后开始执行的,就是说fork下面的代码子进程才开始执行,具体的是说从返回值这里子进程开始执行,子进程不会再fork了,所以不会出现子进程再去fork产生一个子进程的问题. 也就是说:从返回值这里开始,父进程返回子进程的PID,子进程返回0;
 


4)getppid与getpid


getppid:得到一个进程的父进程的PID; getpid:得到当前进程的PID;
man getpid; man getppid

fork补充

http://www.lryc.cn/news/335857.html

相关文章:

  • 李廉洋:4.10黄金原油晚间走势最新分析及策略。
  • 【头歌-Python】字符串自学引导
  • 44-技术演进(下):软件架构和应用生命周期技术演进之路
  • 【C++】C++中的list
  • uniapp:Hbuilder没有检测到设备请插入设备或启动模拟器的问题解决
  • 基于RBF的时间序列预测模型matlab代码
  • vue vue3 手写 动态加载组件
  • HTML:表单
  • 即插即用篇 | YOLOv5/v7引入Haar小波下采样 | 一种简单而有效的语义分割下采样模块
  • Plonky2.5:在Plonky2中验证Plonky3 proof
  • 卷积通用模型的剪枝、蒸馏---剪枝篇(此处以deeplabv3+为例,可根据模型自行定制剪枝层)
  • 使用Ollama在本地运行AI大模型gemma
  • 【IC前端虚拟项目】时序面积优化与综合代码出版本交付
  • windows版本-idea中下载的java版本在哪
  • 设计模式:创建者模式
  • 【linux】基础IO(四)
  • 集合框架(数组,Arrays.sort,list,map,set,stack,queue)蓝桥杯习题
  • 【C++基础】运算符和流程控制语句
  • AOF文件重写
  • 第四次面试总结 — 嘉和智能 - 全栈开发
  • tx-lcn使用
  • oracle恢复异常处理
  • 谈谈什么是 Redis
  • 备战蓝桥杯(java)(日益更新)
  • 06 Php学习:字符串
  • python画图Matplotlib和Seaborn
  • 一体式I/O模块与RS485串口联动,实现工业网络无缝对接
  • 如何在Uniapp真机中使用H.265无插件流媒体播放器EasyPlayer
  • 【MySQL数据库 | 第二十五篇】深入探讨MVCC底层原理
  • 【LAMMPS学习】八、基础知识(1.6) LAMMPS 与其他代码耦合