IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 5:bsah,僵死进程 -> 正文阅读

[系统运维]Linux 5:bsah,僵死进程


1. Linux

1.1 Linux内核

Linux内核代码是C语言编写的,fork复制进程先复制PCB,在复制进程实体,父子进程并发执行。
系统通过双向链表管理进程,节点数量就是进程数量,

1.2 bash命令解释器

在这里插入图片描述
当执行某个命令,比如./main命令,./main命令本质上是一个可执行程序,bash复制自己本身,将复制出来的子bash替换成main程序,然后运行man程序。

父进程的父进程是bash
在这里插入图片描述

1.3 内存空间

打印出来的是逻辑内存地址,不是真实物理内存地址,所以它们使用的不是同一块内存空间。
在这里插入图片描述

  • Fork执行过程中,父进程内存地址空间会到复制到子进程中

2. 僵死进程(僵尸进程)

2.1 僵死进程的产生

代码示例

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<unistd.h>
  4 int main(int argc,char*argv[],char*envp[])
  5 {
  6     int n=0;
  7     char*s=NULL;
  8 
  9     pid_t id=fork();
 10     //执行失败,fork返回-1
 11     if(id==-1)
 12     {
 13         exit(1);
 14     }
 15     //执行成功,fork返回0
 16     if(id==0)
 17     {
 18         n=7;
 19         s="child";
 20     }//在子进程中执行
 21     else
 22     {
 23         n=3;
 24         s="parent";
 25     }//在父进程中执行
 26     int i=0;
 27     for(;i<n;i++)
 28     {
 29         printf("s=%s,curr_pid=%d,curr_ppid=%d,%p \n",s,getpid(),getppid(),&n);
 30         sleep(1);
 31     }
 32     exit(0);
 33 }

运行结果

  • 父进程结束后提示符会打印

  • 当前子进程的父进程id号相同,和父进程结束之前的不同,是因为当前进程的父进程结束后,当前子进程失去了原有的父进程,变为了孤儿进程,所以有一个进程收养了它们,作为它们的父进程。
    在这里插入图片描述
    在这里插入图片描述

  • 父进程可以处理子进程,父进程不能先于子进程结束。

  • 如果子进程先于父进程结束,父进程没有获取子进程的退出码,子进程先结束有可能会变为僵死进程。(父进程结束后,被1号进程接收)

2.2 僵死进程定义

当子进程先于父进程结束,父进程没有获取子进程的退出码时候,子进程就会处于僵死进程状态。
在这里插入图片描述
在这里插入图片描述

2.3 僵死进程及处理方法

  • 1 僵死进程概念:子进程先于父进程结束,父进程没有调用wait获取子进程退出码。
  • 2 如何处理僵死进程:父进程通过调用wait()完成。
  • 3 Init进程收养孤儿进程

2.4 如何获取僵死进程退出码?

代码示例

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<unistd.h>
  4 #include<sys/wait.h>
  5 int main(int argc,char*argv[],char*envp[])
  6 {
  7     int n=0;
  8     char*s=NULL;
  9 
 10     pid_t id=fork();
 11     //执行失败,fork返回-1
 12     if(id==-1)
 13     {
 14         exit(1);
 15     }
 16     //执行成功,fork返回0
 17     if(id==0)
 18     {
 19         n=3;
 20         s="child";
 21     }//在子进程中执行
 22     else
 23     {
 24         n=7;
 25         s="parent";
 26         int val=0;
 27         int child_pid=wait(&val);
 28         if(WIFEXITED(val))
 29         {
 30             printf("exit code:%d\n",WEXITSTATUS(val));
 31         }
 32     }//在父进程中执行
 33     exit(3);
 34 }

运行结果
在这里插入图片描述
在这里插入图片描述


  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:43:29  更:2022-05-12 16:44:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:32:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码