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

秒懂:父子进程与bash(命令行参数)的关系

情景解析:

  执行以下代码:

#include<string.h>
#include<unistd.h>
int g_val = 100000;int main()
{int key=7;printf("I am father process, pid: %d, ppid: %d, g_val: %d\n", getpid(), getppid(), g_val);sleep(5);pid_t id = fork();if(id == 0){//childwhile(1){printf("I am child process, pid: %d, ppid: %d, g_val: %d,key=%d\n", getpid(), getppid(), g_val,key);sleep(1);}}else{// fatherwhile(1){printf("I am father process, pid: %d, ppid: %d, g_val: %d\n", getpid(), getppid(), g_val);sleep(1);}}
}

 结果:

可以看到: 

  • 父进程的数据默认能被子进程看到并访问。(访问 ≠ 子进程不能修改)
  • 我们发现父进程的pid一直在变化,但是ppid没有改变,一直都是2836
  • 2836是谁❓就是命令行解释器☞bash进程

OS启动的时候都会启动一个进程☞bash进程
命令行中无论是启动自己的程序,还是系统程序。都会变成进程,起始都是bash的子进程。
命令行中输入的参数默认是输入给bash进程的获取的。


注意❗:系统指令程序和自己程序启动运行都是一样,并没有任何差别

bash进程把命令行参数表传给子进程两种方式

  1. 传参
  2. 父进程的命令行参数表(数据段)是可以被子进程共享的

流程:

  • 登录Linux系统
  • 创建bash进程
  • 在命令行中输入参数
  • bash进程获取参数的路径&可执行程序(怎么获取❓下篇)
  • 创建子进程
  • bash并把【命令行参数表】传给子进程main函数(传参 / 共享)
  • 子进程接着执行自己的代码 

 注意:

  • 每个用户启动都会有一个单独的bash进程,bash单独给这个用户形成命令行参数表和环境变量表。以及配置文件都是每个用户都有一份。互相独立,不影响。
  • 每开启一个终端就会有1个bash进程。
  • 一个用户也可以有多个bash进程。


http://www.mrgr.cn/news/26698.html

相关文章:

  • 对地观测期刊参考文献格式
  • 财谷通抖音小店的独特魅力
  • 【目标检测】labelimg图像标注软件的使用流程
  • RFID读写器:零部件加工中的高效识别与管理利器
  • mac nvm无法现在node版本问题(临时解决)
  • 高效执行自动化用例:分布式执行工具pytest-xdist实战
  • 文档团队如何组成?
  • Docker_启动redis,容易一启动就停掉
  • Apache Cordova开发教程-入门基础
  • Redis 数据类型
  • SAP自动化-ME12批量更新某行价格
  • 2024年城市客运安全员考试题库及答案
  • Prometheus监控系统部署及应用
  • 【vue-media-upload】一个好用的上传图片的组件,注意事项
  • YOLOv8改进 | 融合改进 | C2f融合重写星辰网络⭐以及CAA【二次融合 +​ CVPR2024】
  • 稀土抗菌剂在医疗方面的应用
  • Python 导出Excel
  • 【Unity】在Unity 3D中使用Spine开发2D动画
  • 氢能源多旋翼无人机技术详解
  • 探究大模型微调 Lora 的不同形态(上篇): AdaLora、 AsLora、 PiSSA、 DoRA