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

[操作系统,学习记录]3.进程(2)

1.fork();

玩法一:通过返回值if,else去执行不同的代码片段

玩法二:if,else然后调用execve函数去执行新的程序

2.进程终止:

        退出码,子进程通过exit/return返回,父进程wait/waitpid等待而得,status(虽int但仅利用后八位),

return n; == exit(n);

3.进程等待:

父进程不管子进程(不wait),父进程退出——孤儿进程,不退出——僵尸进程(内存泄漏)

父进程用wait/waitpid函数来回收子进程

pid_t wait(int* status);
// 返回值:
//     成功返回被等待进程pid,失败返回-1。
// 参数:
//     输出型参数,获取⼦进程退出状态,不关⼼则可以设置成为NULL
 pid_ t waitpid(pid_t pid, int *status, int options);
// 返回值:
//     当正常返回的时候waitpid返回收集到的⼦进程的进程ID;如果设置了选项
//     WNOHANG(第三个参数),⽽调⽤中
//     waitpid发现没有已退出的⼦进程可收集,则返回0;
//     如果调⽤中出错,则返回-1,这时errno会被设置成相应的值以指⽰错误所在;
// 参数:
//     pid:
//         pid == -1,等待任意一个子进程
//         pid > 0(pid为子进程pid)等待指定的子进程
//     status:输出型参数
//     这里介绍两个查看进程status的宏:
//         WIFEXITED(status);(wait if exited)判断是否正常退出
//         WEXITSTATUS(status);若正常退出则为子进程退出码
//     options:0为阻塞等待
//              WNOHANG——意为"wait no hang"简写,表不阻塞等待,可能为1,不建议使用1代替这个宏 

都有status保存退出码了,为什么还要WEXITSTATUS这个宏来提取?

因为status是int类型,但是被当成位图使用,它的8-15位存的是退出状态

4.进程程序替换(玩法二)

利用exec系列函数去替换调用新的程序,exec意为execute

5.自主设计一个简单的shell:

这里先鸽着,等以后填坑

http://www.dtcms.com/a/99208.html

相关文章:

  • -PHP 应用文件上传函数缺陷条件竞争二次渲染黑白名单JS 绕过
  • AI大模型从0到1记录学习 day09
  • 求解AX=XB 方法
  • 车载软件刷写 --- 由擦除例程问题带来的反思
  • Java 图片压缩:高效压缩方案解析
  • 基于三维数字图像相关(DIC)技术的生物材料多尺度力学性能原位表征方法研究
  • 基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
  • Centos安装Python3.7(亲测可用)
  • github——SSH连接配置文档
  • @Slf4j注解
  • python的内存管理
  • Knife4j 接口文档使用流程分析
  • 7.3 主成分分析(PCA)
  • Python切片中的步长秘密
  • Python 序列构成的数组(切片)
  • sqli-labs靶场 less 10
  • prometheus+grafana监控虚拟机实操
  • Windows 11 VS Code C/C++ 开发环境搭建——一种尽量“绿色”的方法
  • defconfig配置宏的规则
  • C. Assembly via Minimums
  • 一种C# Winform的UI处理
  • Python第六章18:数据容器的通用操作
  • 简单ELK框架搭建
  • 为pip设置国内镜像源
  • Android Jetpack学习总结(源码级理解)
  • 明达IOT 平台助推纺织龙头实现智能管理
  • 动态规划篇(数位统计DP)
  • 用空闲时间做了一个小程序-二维码生成器
  • 【安全】nginx防止host头攻击
  • c++弱指针实现原理