你不知道父进程和子进程的“故事”

 父进程

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

 你不知道父进程和子进程的“故事”_设计制作_嵌入式技术

UNIX

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

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

僵尸进程与孤儿进程

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

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

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

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

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信号的问题上,由于Sys     te   m V与BSD由来已久的差异,若要回收派生出的子进程的资源,调用wait仍是最便捷的方式。




49
86
0
44

相关资讯

  1. 1、易烊千玺微博宣传新剧,阿易开始接受新思想,千玺打戏很出彩3822
  2. 2、《我的小确幸》插曲《I’mWithU》上线萨吉的小确幸是遇见你4552
  3. 3、郭富城回复天价片酬,作为演员从来不过问3963
  4. 4、《中国合伙人》延期上映商界大佬看片感动落泪2222
  5. 5、《激战》亮相香港影视展林超贤挑战新题材2070
  6. 6、《如懿传》见面会,“皇帝嫔妃”一一现身,谁是最美的那个?1826
  7. 7、乌尔善《封神三部曲》“质子旅”肌肉亮相,来检验下成色?4455
  8. 8、治愈人心的猫片《流浪猫鲍勃》送给喜欢猫咪的你们4254
  9. 9、《说好不流泪》探班景岗山沧桑男翻身创幸福3308
  10. 10、王凯谈《大江大河2》:宋运辉要适应当独立掌舵人964
全部评论(0)
我也有话说
0
收藏
点赞
顶部