linux进程控制

一.进程创建

1.写时拷贝

通常父子进程使用的数据是一份的,但是如果哪个进程想要更改其中的某个数据时,则系统会将这个数据拷贝一份给这个进程

因为有写时拷贝的存在,父子进程才得以彻底分离!保证了进程的独立性!

2.fork函数

(1)功能:创建子进程

(2)使用场景:一个父进程希望复制自己,使父子进程同时执行不同的代码段

(3)调用失败原因:

a.系统中有太多进程,内存不足以再创建进程

b.系统可能会对用户创建进程数量有限制,用户创建的进程数超过限制也会创建失败

二.进程终止

1.进程退出场景

a.代码运行完毕,结果正确

b.代码运行完毕,结果错误

c.代码异常终止

针对前两种情况,通常通过进程返回的++错误码++来进行判断

2.进程常见退出方法

(1)main函数执行完成返回

退出码:由main函数return的数字就是退出码,不同的数字代表不同的退出状态,我们可以用退出码来判断程序是成功结束的还是以错误结束的

可以用echo $? 打印最近一个程序(进程)退出时的退出码

(2)调用exit函数

C语言的库函数,使用该函数退出进程时,会刷新缓存区

(3)调用_exit

系统调用接口,使用该函数退出进程时,不会刷新缓存区

exit()和_exit()的区别

三.进程等待(等待子进程退出)

1.进程等待的必要性

a.子进程退出,如果父进程不管不顾,就会造成子进程一直处于僵尸状态,造成内存泄露,即使是杀人不眨眼的kill -9 也无能为力,因为谁也没有办法杀死一个已经死去的进程

b.父进程派给子进程完成的任务完成的如何,我们需要知道,如:子进程运行完成,是不是正常退出的,完成的结果对还是不对

2.进程等待是什么?

父进程通过进程等待的方式,回收子进程资源(最重要的),获得子进程退出信息(可选获取不获取)

3.实际操作

(1)wait函数

(2)waitpid函数

4.实验代码

相关推荐
杨靳言先1 小时前
✨【运维实战】内网服务器无法联网?巧用 SSH 隧道实现反向代理访问公网资源 (Docker/PortForwarding)
服务器·docker·ssh
Justice link3 小时前
K8S基本配置
运维·docker·容器
观熵3 小时前
SaaS 系统的自动化部署结构设计实战指南:基于 K8s + Helm 的工程落地路径
运维·kubernetes·自动化·saas 架构
chinesegf3 小时前
ubuntu中虚拟环境的简单创建和管理
linux·运维·ubuntu
若涵的理解3 小时前
一文读懂K8S kubectl 命令,运维小白必看!
运维·docker·kubernetes
java_logo3 小时前
2025 年 11 月最新 Docker 镜像源加速列表与使用指南
linux·运维·docker·容器·运维开发·kylin
一碗面4214 小时前
Linux下的网络模型
linux·网络模型
峰顶听歌的鲸鱼4 小时前
Kubernetes管理
运维·笔记·云原生·容器·kubernetes·云计算
霖霖总总4 小时前
[小技巧42]InnoDB 索引与 MVCC 的协同工作原理
运维·数据库·mysql
CRMEB系统商城4 小时前
CRMEB多商户系统(PHP)- 移动端二开之基本容器组件使用
运维·开发语言·小程序·php