目录
父进程
UNIX" >UNIX
僵尸进程与孤儿进程" >僵尸进程与孤儿进程
Linux" >Linux
子进程
产生" >产生
与父进程的关系" >与父进程的关系
“孤儿进程”与“僵尸进程”" >“孤儿进程”与“僵尸进程”
解决与预防" >解决与预防
首页 运维 linux运维 什么是父进程和子进程

什么是父进程和子进程

Jun 22, 2017 pm 03:41 PM
进程

父进程

在计算机领域,父进程(英语:Parent Process)指已创建一个或多个子进程的进程。

UNIX


在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。

操作系统内核以进程标识符(Process Identifier,即PID)来识别进程。进程0是系统引导时创建的一个特殊进程,在其调用fork创建出一个子进程(即PID=1的进程1,又称init)后,进程0就转为交换进程(有时也被称为空闲进程),而进程1(init进程)就是系统里其他所有进程的祖先。

僵尸进程与孤儿进程


当一个子进程结束运行(一般是调用exit、运行时发生致命错误或收到终止信号所导致)时,子进程的退出状态(返回值)会回报给操作系统,系统则以SIGCHLD信号将子进程被结束的事件告知父进程,此时子进程的进程控制块(PCB)仍驻留在内存中。一般来说,收到SIGCHLD后,父进程会使用wait系统调用以获取子进程的退出状态,然后内核就可以从内存中释放已结束的子进程的PCB;而如若父进程没有这么做的话,子进程的PCB就会一直驻留在内存中,也即成为僵尸进程。

孤儿进程则是指父进程结束后仍在运行的子进程。在类UNIX系统中,孤儿进程一般会被init进程所“收养”,成为init的子进程。

为避免产生僵尸进程,实际应用中一般采取的方式是:

  1. 将父进程中对SIGCHLD信号的处理函数设为SIG_IGN(忽略信号);

  2. fork两次并杀死一级子进程,令二级子进程成为孤儿进程而被init所“收养”、清理。

Linux

在Linux内核中,进程和POSIX线程有着相当微小的区别,父进程的定义也与UNIX不尽相同。Linux有两种父进程,分别称为(形式)父进程与实际父进程,对于一个子进程来说,其父进程是在子进程结束时收取SIGCHLD信号的进程,而实际父进程则是在多线程环境里实际创建该子进程的进程。对于普通进程来说,父进程与实际父进程是同一个进程,但对于一个以进程形式存在的POSIX线程,父进程和实际父进程可能是不一样的。

 

子进程


在计算机领域中,子进程为由另外一个进程(对应称之为父进程)所创建的进程。子进程继承了父进程的大部分属性,例如文件描述符。

产生


在Unix中,子进程通常为系统调用fork的产物。在此情况下,子进程一开始就是父进程的副本,而在这之后,根据具体需要,子进程可以借助exec调用来链式加载另一程序。

与父进程的关系


一个进程可能下属多个子进程,但最多只能有1个父进程,而若某一进程没有父进程,则可知该进程很可能由内核直接生成。在Unix与类Unix系统中,进程ID为1的进程(即init进程)是在系统引导阶段由内核直接创建的,且不会在系统运行过程中终止执行(可参见Linux启动流程);而对于其他无父进程的进程,则可能是为在用户空间完成各种后台任务而执行的。

当某一子进程结束、中断或恢复执行时,内核会发送SIGCHLD信号予其父进程。在默认情况下,父进程会以SIG_IGN函数忽略之。

“孤儿进程”与“僵尸进程”


在对应的父进程结束执行后,进程就会变成孤儿进程,但之后会立即由init进程“收养”为其子进程。

某一子进程终止执行后,若其父进程未提前调用wait,则内核会持续保留子进程的退出状态等信息,以使父进程可以wait获取之。而因为在这种情况下,子进程虽已终止,但仍在消耗系统资源,所以其亦称僵尸进程。wait常于SIGCHLD信号的处理函数中调用。

解决与预防

在POSIX.1-2001标准规定中,父进程可将SIGCHLD的处理函数设为SIG_IGN(亦为默认设定),或为SIGCHLD设定SA_NOCLDWAIT标记,以使内核可以自动回收已终止的子进程的资源。自Linux 2.6与FreeBSD 5.0起,两种内核皆支持了这两种方式。但是,在忽略SIGCHLD信号的问题上,由于System V与BSD由来已久的差异,若要回收派生出的子进程的资源,调用wait仍是最便捷的方式。

以上是什么是父进程和子进程的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

解释一下explorer.exe进程是什么 解释一下explorer.exe进程是什么 Feb 18, 2024 pm 12:11 PM

explorer.exe是什么进程在我们使用Windows操作系统的时候,经常会听到一个名词"explorer.exe".那么,你是否好奇这个进程到底是什么?在本文中,我们将详细解释explorer.exe是什么进程以及其功能和作用。首先,explorer.exe是Windows操作系统的一个关键进程,它负责管理和控制Windows资源管理器(Window

com surrogate是什么进程 com surrogate是什么进程 Sep 14, 2022 pm 02:56 PM

“com surrogate”是“C:\Windows\System32\dllhost.exe”的进程;出现该进程通常是“COM+”组件停止工作,这个进程占用高甚至直接未响应,这是由于电脑在加载文件图标的时候出现问题,导致电脑变的卡顿,可以在计算机属性设置中解决卡顿问题。

请问ccsvchst.exe是哪种进程? 请问ccsvchst.exe是哪种进程? Feb 19, 2024 pm 11:33 PM

ccsvchst.exe是一种常见的进程文件,它是SymantecEndpointProtection(SEP)软件的一部分,而SEP则是一款由著名的网络安全公司Symantec开发的终端保护解决方案。作为该软件的一部分,ccsvchst.exe负责管理和监控SEP的相关进程。首先,我们来了解一下SymantecEndpointProtection(

如何正确杀死Linux中的僵尸进程 如何正确杀死Linux中的僵尸进程 Feb 19, 2024 am 10:40 AM

在Linux系统中,僵尸进程是已经终止但仍保留在系统中的特殊进程。虽然僵尸进程不会消耗太多资源,但如果数量过多,可能会导致系统资源耗尽。本文将介绍如何正确清除僵尸进程,以确保系统的正常运行。1Linux僵尸进程子进程完成任务后,如果父进程没有及时检查状态,子进程将成为僵尸进程。子进程在等待父进程确认,完成后系统才会回收。否则,僵尸进程会继续悬挂在系统中。要检查系统中是否存在僵尸进程,可通过运行命令top来查看所有正在运行的进程及可能存在的僵尸进程。‘top’命令的结果从上图可以看到Linux中进

Linux进程优先级调整方法详解 Linux进程优先级调整方法详解 Mar 15, 2024 am 08:39 AM

Linux进程优先级调整方法详解在Linux系统中,进程的优先级决定了其在系统中的执行顺序和资源分配情况。合理调整进程的优先级可以提高系统的性能和效率。本文将详细介绍Linux中如何调整进程的优先级,并提供具体的代码示例。一、进程优先级概述在Linux系统中,每个进程都有一个与之相关联的优先级。优先级的范围一般是-20到19,其中-20表示最高优先级,19表

如何在 Windows 11 中停止任务管理器进程更新并更方便地终止任务 如何在 Windows 11 中停止任务管理器进程更新并更方便地终止任务 Aug 20, 2023 am 11:05 AM

如何在Windows11和Windows10中暂停任务管理器进程更新按CTRL+窗口键+删除打开任务管理器。默认情况下,任务管理器将打开“进程”窗口。正如您在此处看到的,所有应用程序都在无休止地移动,当您想要选择它们时,可能很难将它们指向下方。因此,按CTRL并按住它,这将暂停任务管理器。您仍然可以选择应用程序,甚至可以向下滚动,但您必须始终按住CTRL按钮。

为什么Linux中的进程会处于休眠状态? 为什么Linux中的进程会处于休眠状态? Mar 20, 2024 pm 02:09 PM

为什么Linux中的进程会处于休眠状态?在Linux操作系统中,进程可能会处于休眠状态,这是由于多种不同的原因和条件造成的。进程处于休眠状态时,表示该进程暂时被挂起,无法继续执行,直到满足某种条件后才能被唤醒继续执行。接下来将详细介绍在Linux中进程进入休眠状态的几种常见情况,并通过具体的代码示例加以说明。等待I/O完成:当进程发起一个I/O操作(例如读取

Linux系统无PHP进程的检测方法 Linux系统无PHP进程的检测方法 Mar 16, 2024 am 11:42 AM

《Linux系统无PHP进程的检测方法,需要具体代码示例》在使用Linux系统进行Web开发时,经常会依赖PHP进程来处理动态页面和逻辑,而有时候我们可能需要监测服务器上是否存在PHP进程。本文将介绍一种检测Linux系统中是否存在PHP进程的方法,并给出具体的代码示例。为什么需要检测PHP进程在Web开发中,PHP进程扮演着至关重要的角色,它负责解析执行P

See all articles