孤儿进程,守护进程,僵尸进程

简介: 孤儿进程,守护进程,僵尸进程

前言

当谈到进程管理时,了解以下进程是很重要的:僵尸进程(Zombie Process),孤儿进程(Orphan Process),守护进程(Daemon Process)。


一、守护进程

Daemon 守护进程,是 Linux 中的后台服务进程,通常独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。

创建守护进程最关键的是 调用 setsid 函数创建一个新的 Session,并成为 Session Leader.

创建守护进程的流程可以分为以下几个步骤:

  1. 创建子进程,父进程退出。
  2. 调用 setsid 函数在子进程中创建新对话。
    (子进程独立出来,脱离控制)
  3. 改变当前目录

二、孤儿进程

孤儿进程是指其父进程已经退出或终止,而它的子进程尚未退出或终止的进程。在这种情况下,孤儿进程将被init进程(进程ID为1)接管,成为init进程的子进程。


init进程对孤儿进程进行回收处理,以释放它们占用的系统资源,并确保它们的退出状态被正确处理。这样可以防止孤儿进程变成僵尸进程。


孤儿进程通常是由于父进程意外终止或父进程没有正确等待子进程的退出状态而产生。

三、僵尸进程

  1. 什么是僵尸进程?

僵尸进程 是一个进程 fork( ) 创建子进程,当子进程退出时,父进程未使用 wait 或 waitpid 函数回收子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程叫做僵死进程。

  1. 僵尸进程的危害

在进程退出的时候,内核释放该进程的所有资源,包括打开的文件,占用的内存等。但是仍然保留一定的信息(pid, 进程状态等),直父进程使用 wait / waitpid 来回收进程时才释放。

如果不回收进程,那么信息就一直未被释放,进程号一直会被占用。而系统的进程号是一定的,大量的僵尸进程就会导致没有进程号来创建新进程。

  1. 如何清理僵尸进程?

当系统中出现了僵尸进程时,我们是无法通过 kill 命令把它清除掉的。kill -9 pid

但是我们可以杀死它的父进程,让它变成孤儿进程,并进一步被系统中管理孤儿进程的进程收养并清理。


总结

这些概念在进程管理中具有重要意义。了解僵尸进程、孤儿进程和守护进程的特点和处理方法有助于编写更健壮的多进程应用和系统。

相关文章
|
4月前
|
Linux
网络编程之信号(处理僵尸进程的终极办法)之初识信号捕捉器
接着我们之前的管道所提出来的问题() 在创建子进程之后,子进程究竟何时终止????调用waitpid函数后还要无休止的等待子进程终止吗???”,这显然会是一个问题。因为父进程往往与子进程一样繁忙,因此我们不能只调用waitpid函数来等待子进程终止。那么我们应该怎么办呢??? 信号闪亮登场!!!!!
30 0
|
2月前
|
Linux C语言
Linux: 僵尸进程究竟是什么?有什么危害?
Linux: 僵尸进程究竟是什么?有什么危害?
36 0
|
3天前
|
弹性计算 Shell Linux
查找Linux 系统中的僵尸进程
【4月更文挑战第29天】
5 0
|
4天前
|
弹性计算 Shell Linux
查找 Linux 系统中的僵尸进程
【4月更文挑战第28天】
5 0
|
2月前
|
Linux Shell 调度
【Linux】进程排队的理解&&进程状态的表述&&僵尸进程和孤儿进程的理解
【Linux】进程排队的理解&&进程状态的表述&&僵尸进程和孤儿进程的理解
|
2月前
|
监控 Unix Linux
深入理解Linux C/C++ 系统编程中系统调用导致的僵尸进程及其预防
深入理解Linux C/C++ 系统编程中系统调用导致的僵尸进程及其预防
42 0
|
4月前
|
Linux 调度
『 Linux 』僵尸进程与孤儿进程
『 Linux 』僵尸进程与孤儿进程
|
4月前
进程之 回收子进程之避免僵尸进程的产生
wait() 与 waitpid() 函数的使用.
30 0
|
5月前
|
监控 Unix Linux
Linux—进程状态、僵尸进程、孤独进程、优先级
Linux—进程状态、僵尸进程、孤独进程、优先级
46 0
|
23小时前
|
Linux Shell
【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】
【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】