一、孤儿进程

孤儿进程:不是没有爹!会被领养。
过程:爹先死,孩子还活着,孩子称为孤儿进程。
注意:孤儿会被 init 进程领养(init 进程是所有孤儿进程的父进程)。
设计领养目的:为了子进程结束后,可以回收子进程占有的系统资源,因为进程结束后,子进程自己能够释放用户区空间,但无法释放 PCB,只能由父亲释放。

二、僵尸进程

僵尸进程:是一个死的进程。
过程:孩子死了,爹不回收孩子的 PCB,此时,孩子称为僵尸进程。

三、设计孤儿进程

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{pid_t pid = fork();if(pid == 0) {sleep(1); // 子进程睡一秒,使父进程先执行return死掉printf("%d\n",getppid()); // 结果:子进程的ppid = 1 // 意味着被init进程领养}if(pid > 0){printf("%d\n",getpid()); // 结果:父进程的pid =3458}return 0;

四、设计僵尸进程

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{pid_t pid = fork();if(pid == 0) {printf("I am child"); // 先执行return死掉}if(pid > 0){while (1)
{sleep(1) // 父亲一直sleep,因此没有回收子进程,使子进程成为僵尸进程
}}return 0;
}

那么如何杀死僵尸进程呢?
注意: 不能用 kill -9 pid,因为这个命令是杀死活的进程,
我们用杀死父进程,使僵尸进程被领养,自动释放。

Linux学习之系统编程篇:孤儿进程和僵尸进程(描述对象都是子进程)相关推荐

  1. Linux学习之系统编程篇:编写一个守护进程

    需求:写一个守护进程,每隔 2s 获取一次系统时间,将这个时间写入到磁盘文件 #include <stdio.h> #include <stdlib.h> #include & ...

  2. Linux学习之系统编程篇:ps 和 kill 命令以及父子进程间数据共享模式

    一.ps 和 kill 命令 1.ps 命令 常用方式: ps aux :查看正在运行进程信息(主要查 pid). ps ajx :更加详细(PID. PPID:父进程 id. PGID:进程组 id ...

  3. Linux学习之系统编程篇:守护进程(精灵进程、后台进程)

    一.背景 一般情况下,启动终端(shell),系统会创建一个会话(shell 进程是会长),经过后续各种操作,该会话中会存在多个进程组,每个进程组中也会有多个进程(父进程是组长),若此时关闭 shel ...

  4. Linux学习之系统编程篇:PCB( 进程控制块)、进程状态、转换和控制

    一.PCB PCB 本质是一个超大的结构体 PCB 结构体中重要属性: (1) 进程 pid :进程的唯一编号,类型 pid_t,无符号整形. (2) 进程状态:就绪.运行.挂起.停止. (3) CP ...

  5. Linux学习之系统编程篇:exec 函数族

    函数能力:"换核不换壳"(能够替换进程虚拟地址空间中.text 代码段). 作用:让父子进程执行不相干的操作. 效果:有一个运行的程序 A,在 A 中调用另一个程序 B,程序有父子 ...

  6. Linux学习之系统编程篇:单个线程的退出函数

    能否用 exit 来退出某个线程,exit 是用来退出进程的,因为父子线程共享同一地址空间,如果在某线程中使用,会使 所有线程全退出,因此需要使用别的函数 :pthread_exit (注意:子线程使 ...

  7. Linux学习之系统编程篇:进程回收(wait / waitpid)

    一.wait wait 函数 :阻塞函数,使进程一直处于等待状态,直至进程死亡. (1)头文件: #include <sys/types.h> #include <sys/wait. ...

  8. Linux学习之系统编程篇:循环创建多个子进程练习

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() {int num = 5 ...

  9. Linux学习之系统编程篇:程序、进程、并发、并行

    一.程序和进程 (1)程序: 本质:二进制文件,可以运行,但还没有运行,占用磁盘空间,不占用 CPU 和内存(系统资源). (2)进程: 本质:正在执行的程序,占用 CPU 和内存等更多的系统资源,一 ...

最新文章

  1. Linux 用户行为日志记录
  2. C#的多线程机制探索4
  3. 如何用C语言编写PHP扩展的详解
  4. Hexo 博客本地预览报错:Error: listen EADDRINUSE 0.0.0.0:4000
  5. vs2017python配置opencv_关于VS2017配置OpenCV出现无法打开文件“opencv_ml249d.lib”的解决方案...
  6. 【linux学习笔记五】帮助命令
  7. OSI七层模型与TCP/IP四层与五层模型详解
  8. 神经网络机器翻译总结
  9. 非线性回归(Non-linear Regression)学习笔记
  10. 路由器的原理及其配置(一)
  11. django 发送邮件验证码
  12. 世界上最漂亮城市夜景
  13. 人体红外传感模块原理分析
  14. Atari 2600 新书:主机游戏的一次黎明冒险
  15. vivo删除的便签怎么恢复,vivo手机便签恢复教学
  16. 无领导小组讨论面试真题解析(八)—— 海上救援
  17. fabricJs 在vue项目中的实战记录(四)添加文字以及文字的操作[字体大小、颜色、字间距、行间距、透明度、加粗、斜体、下划线、删除线、对齐方式、字体设置]
  18. 深度学习利用回归算法进行数据预测
  19. 国庆假期也不能打断我坚持早起的目标,人气推荐3个早起打卡小程序
  20. 102 (net::ERR_CONNECTION_REFUSED)

热门文章

  1. MindSpore感恩节重磅福利,华为Mate 40E送送送!
  2. ACL 2021 | 北京大学KCL实验室:如何利用双语词典增强机器翻译?
  3. 从动力学角度看优化算法:为什么SimSiam不退化?
  4. 从动力学角度看优化算法:为什么学习率不宜过小?
  5. 变分自编码器VAE:一步到位的聚类方案
  6. mybatis分页查询
  7. 川崎焊接机器人编程实例_机器人现场编程-川崎机器人示教-综合命令.pptx
  8. byte数组转字符串_leetcode刷题844比较含退格的字符串(带代码解析,带知识点回顾)...
  9. Python——CSV文件读写(CSV库)
  10. 2019牛客暑期多校训练营(第二场)