Linux-进程2

我的3个问题

纠正:mm_struct不会被销毁,而是它内部与旧程序有关的字段被清空后重新初始化,比如重新划分数据段的虚拟地址起止范围(start / end),保留实体,只改内容;如果销毁mm_struct再重建,还需要更改task_struct的mm结构体指针。

涉及到进程替换

进程等待

接着option,阻塞与非阻塞

父进程该如何做自己的事?

//插叙,先介绍函数指针

为什么要函数声明?

接着,父进程可以通过回调函数来继续自己的事

4.进程程序替换

替换指的是虚拟地址空间的替换,而不是内存的

我们可以通过C语言调用任何语言(C++/python/java进行程序替换,系统级别,只要是进程都ok)

其他C语言级别的exec*和系统调用接口execvp,以应对不同的场景 6+1、

5.自定义shell

版本1

但是cd 命令执行不了,路径不变?

接下来增加内置指令

修改思路

版本2

同理export也是内置命令,新增/修改环境变量表,shell自己执行,子进程继承父进程完全修改的环境变量表,系统后续所有环境变量操作,都直接用我的 g_env。


fgets读取一行

换行符\n也会被写入到自定义的s缓冲区中,比如得到 ls -a -l\n,进而得到 ls -a -l\n\0 需要后续手动删除\n

scanf以空格作为分隔符

snprintf

最后一个字节传入\0

printf

传入指向以 \0 结尾的char*类型指针,也就是地址-字符数组的数组名

理解字符指针和字符数组

strtok

切割字符串,把分隔符替换成 \0,分割出独立的令牌;

c_str

已经定义了 char *g_env[MAX_ENVS]; 这个全局数组,为什么还需要对 g_env 里的元素做 malloc?

我们自己定义的env


完。

相关推荐
AutumnWind042022 分钟前
【Docker Compose 快速入门】
运维·docker·容器
2501_9378609426 分钟前
中篇:TCP 为什么可靠又高效?滑动窗口、流量控制、拥塞控制与粘包全解析
服务器·网络·tcp/ip
QYRdata1 小时前
2026-2032年图形处理云服务器CAGR预计达18.7%
运维·服务器·服务发现
分布式存储与RustFS1 小时前
图床搬到自己的对象存储:PicGo 加 S3 插件的完整配置
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
月落汀兰2 小时前
建池后类型不可修改!深度拆解 Ceph PG 放置组,副本 / 纠删码池选型,快照与命名空间避坑
运维·ceph
极光通讯2 小时前
呆滞库存回收定价逻辑:如何评估DDR4内存和SATA SSD的回收价值
服务器·ssd
技术人生0012 小时前
VMware Workstation 安装 Ubuntu 24.04 LTS 完整教程
运维·服务器·ubuntu
YumiProxy2 小时前
动态IP冲突排查实战:从ARP检测到DHCP地址池的完整链路
服务器·网络·网络协议·tcp/ip·ip
ai小陈3 小时前
GPU服务器租用容器实战:Docker数据卷持久化与安全重建
服务器·人工智能·安全·docker·ai·gpu算力
智能运维指南3 小时前
从分散运维到统一运维:2026 统一运维管理体系建设路径与选型要点
运维·一体化运维·智能运维·嘉为蓝鲸