fbpx
维基百科

父进程

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

UNIX

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

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

僵尸进程与孤儿进程

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

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

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

  1. 将父进程中对SIGCHLD信号的处理函数设为SIG_IGN(忽略信号);
  2. fork两次并杀死一级子进程,令二级子进程成为孤儿进程而被init所“收养”、清理[1]

Linux

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

参考资料

  1. ^ UNIX环境高级编程Advanced Programming in the UNIX Environment),理查德·史蒂文斯著,1992,ISBN 0-201-56317-7
  2. ^ 存档副本. [2011-11-26]. (原始内容于2012-02-15). 

参见

本條目部分或全部内容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。

父进程, 在计算机领域, 英語, parent, process, 指已创建一个或多个子进程的进程, 目录, unix, 僵尸进程与孤儿进程, linux, 参考资料, 参见unix, 编辑在unix里, 除了进程0, 即pid, 0的交换进程, swapper, process, 以外的所有进程都是由其他进程使用系统调用fork创建的, 这里调用fork创建新进程的进程即为, 而相对应的为其创建出的进程则为子进程, 因而除了进程0以外的进程都只有一个, 但一个进程可以有多个子进程, 操作系统内核以进程标识符, p. 在计算机领域 父进程 英語 Parent Process 指已创建一个或多个子进程的进程 目录 1 UNIX 2 僵尸进程与孤儿进程 3 Linux 4 参考资料 5 参见UNIX 编辑在UNIX里 除了进程0 即PID 0的交换进程 Swapper Process 以外的所有进程都是由其他进程使用系统调用fork创建的 这里调用fork创建新进程的进程即为父进程 而相对应的为其创建出的进程则为子进程 因而除了进程0以外的进程都只有一个父进程 但一个进程可以有多个子进程 操作系统内核以进程标识符 Process Identifier 即PID 来识别进程 进程0是系统引导时创建的一个特殊进程 在其调用fork创建出一个子进程 即PID 1的进程1 又称init 后 进程0就转为交换进程 有时也被称为空闲进程 英语 Idle CPU 而进程1 init进程 就是系统里其他所有进程的祖先 僵尸进程与孤儿进程 编辑当一个子进程结束运行 一般是调用exit 英语 exit operating system 运行时发生致命错误或收到终止信号所导致 时 子进程的退出状态 返回值 会回报给操作系统 系统则以SIGCHLD信号将子进程被结束的事件告知父进程 此时子进程的进程控制块 PCB 仍驻留在内存中 一般来说 收到SIGCHLD后 父进程会使用wait系统调用以取得子进程的退出状态 然后内核就可以从内存中释放已结束的子进程的PCB 而如若父进程没有这么做的话 子进程的PCB就会一直驻留在内存中 也即成为僵尸进程 孤儿进程则是指父进程结束后仍在运行的子进程 在类UNIX系统中 孤儿进程一般会被init进程所 收养 成为init的子进程 为避免产生僵尸进程 实际应用中一般采取的方式是 将父进程中对SIGCHLD信号的处理函数设为SIG IGN 忽略信号 fork两次并杀死一级子进程 令二级子进程成为孤儿进程而被init所 收养 清理 1 Linux 编辑在Linux内核中 进程和POSIX线程有着相当微小的区别 父进程的定义也与UNIX不尽相同 Linux有两种父进程 分别称为 形式 父进程与实际父进程 对于一个子进程来说 其父进程是在子进程结束时收取SIGCHLD信号的进程 而实际父进程则是在多线程环境里实际创建该子进程的进程 对于普通进程来说 父进程与实际父进程是同一个进程 但对于一个以进程形式存在的POSIX线程 父进程和实际父进程可能是不一样的 2 参考资料 编辑 UNIX环境高级编程 Advanced Programming in the UNIX Environment 理查德 史蒂文斯著 1992 ISBN 0 201 56317 7 存档副本 2011 11 26 原始内容存档于2012 02 15 参见 编辑本條目部分或全部内容出自以GFDL授權發佈的 自由線上電腦詞典 FOLDOC 取自 https zh wikipedia org w index php title 父进程 amp oldid 74532828, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。