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.实验代码

相关推荐
Elastic 中国社区官方博客4 小时前
使用 Elastic Cloud Serverless 扩展批量索引
大数据·运维·数据库·elasticsearch·搜索引擎·云原生·serverless
超龄超能程序猿4 小时前
Docker GPU插件(NVIDIA Container Toolkit)安装
运维·docker·容器
Xの哲學5 小时前
Linux SMP 实现机制深度剖析
linux·服务器·网络·算法·边缘计算
2501_906150565 小时前
私有部署问卷系统操作实战记录-DWSurvey
java·运维·服务器·spring·开源
知识分享小能手5 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04的Linux网络配置(14)
linux·学习·ubuntu
钦拆大仁5 小时前
单点登录SSO登录你了解多少
服务器·sso
皇族崛起5 小时前
【视觉多模态】- scannet 数据的 Ubuntu 百度网盘全速下载
linux·ubuntu·3d建模·dubbo
岳来5 小时前
docker 从 Path 值看容器启动命令
运维·docker·容器
CAU界编程小白6 小时前
Linux系统编程系列之进程控制(下)
linux·进程控制
only火车头6 小时前
升级 ceph (16.2 -> 18.2) ceph mon 启动失败
服务器·ceph