浅谈僵尸进程

作者: cpp加油站 | 来源:发表于2018-08-03 12:16 被阅读20次

1.linux系统进程都是怎么生成的

进程运行时,shell命令行接收到了指令,进而调用fork函数来创建一个进程。

2.僵尸进程是怎么产生的

当子进程退出时,父进程没有调用wait函数或者waitpid()函数等待子进程结束,又没有显式忽略SIGCHLD信号,那么它将一直保持在僵尸状态,如果这时父进程结束了,init进程会自动接收这个子进程,为它收尸,但如果父进程是一个循环,不会结束,那么子进程就会一直保持僵死状态。
进程状态:

  • Z 僵尸
  • S 休眠
  • D 不可中断的休眠
  • R 运行
  • T 停止时跟踪

3.僵尸进程会造成内存泄露吗,应该怎么处置僵尸进程

如果父进程是一个循环,子进程无人接收,会造成一部分内存浪费。
此时可以杀死僵尸进程的父进程,让init进程自动回收这个僵尸进程。

4.僵尸进程在内存中还存在吗?

僵尸进程的状态:
一个进程在调用exit()函数结束时,并没有真正的被销毁,而是留下一个称为僵尸进程的数据结构,僵尸进程放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保持一个位置,记载该进程的退出状态等信息。

5.怎样避免僵尸进程

  • 使用signal函数显式忽略SIGCHLD信号;
  • 调用wait或者waitpid()函数;
  • fork两次,父进程fork子进程后继续执行,子进程fork一个孙进程后退出,此时孙进程会被init进程接管,避免僵尸进程,当然子进程的退出还是要进行处理的;

6.wait函数和waitpid函数

头文件:

#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);

wait函数会暂时停止目前进程的执行,直到有信号来到或者子进程结束。
如果在调用wait函数时,子进程已经结束,则会立即用status返回子进程状态值,返回值则是子进程的进程识别码,如果不需要子进程状态值,则status入参可为NULL;

pid_t waitpid(pid_t pid, int *status, int options);

参数说明:
pid 欲等待的子进程识别码,值说明如下:

  • pid < -1 等待进程组识别码为pid绝对值的任何子进程;
  • pid = -1 等待任何子进程,相当于wait;
  • pid = 0 等待进程组识别码与目前进程相同的任何子进程
  • pid > 0 等待任何子进程识别码为pid的子进程

options 有以下几种值:

  • WNOHANG 即使没有子进程退出,它也会立即返回,不会像wait那样永远等下去
  • WUNTRACED 子进程进入暂停则马上返回,但结束状态不予以理会;
    当不想使用options时,可设为0;

相关文章

  • 浅谈僵尸进程

    1.linux系统进程都是怎么生成的 进程运行时,shell命令行接收到了指令,进而调用fork函数来创建一个进程...

  • 僵尸进程处理方案

    僵尸进程介绍 Z(zombie)-僵尸进程(子进程终止,父进程没有wait子进程) 僵尸进程产生原因 僵尸进程是当...

  • 浅谈僵尸进程与孤儿进程

    在《unix环境高级编程》中有提到僵尸进程和孤儿进程。不少同学对这两个概念会混淆,这篇文章总结一下。 在 unix...

  • 如何杀死僵尸进程?

    僵尸进程定义?查看僵尸进程,利用命令ps,可以看到有标记为Z(zombie)的进程就是僵尸进程。 僵尸进程的危害?...

  • 104-僵尸进程

    多进程编程要注意僵尸进程。子进程没有可执行代码后将变成僵尸进程,如果父进程一直运行,又没有处理僵尸进程的代码,僵尸...

  • linux上关闭僵尸进程

    查看所有僵尸进程: 之后kill -9杀死僵尸进程的父进程。

  • 孤儿进程、僵尸进程与进程回收

    孤儿进程与僵尸进程 孤儿进程:父亲死了,子进程被init进程领养僵尸进程:子进程死了,父进程没有回收子进程的资源(...

  • 示例说明僵尸进程的危害及解决方法

    简述 首先简要说明下僵尸进程和孤儿进程的概念(前提都是父进程调用fork产生子进程) 僵尸进程:子进程终止,父进程...

  • 进程之其他进程

    僵尸进程 定义 子进程先于父进程退出,父进程没有对子进程的退出做出相应的处理,此时子进程就会变成僵尸进程 影响 进...

  • 僵尸进程&孤儿进程

    僵尸进程概念 孤儿进程概念

网友评论

    本文标题:浅谈僵尸进程

    本文链接:https://www.haomeiwen.com/subject/jaeyvftx.html