在计算机领域,父进程(英語: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的子进程。
为避免产生僵尸进程,实际应用中一般采取的方式是:
- 将父进程中对SIGCHLD信号的处理函数设为SIG_IGN(忽略信号);
- fork两次并杀死一级子进程,令二级子进程成为孤儿进程而被init所“收养”、清理[1]。
Linux 在Linux内核中,进程和POSIX线程有着相当微小的区别,父进程的定义也与UNIX不尽相同。Linux有两种父进程,分别称为(形式)父进程与实际父进程,对于一个子进程来说,其父进程是在子进程结束时收取SIGCHLD信号的进程,而实际父进程则是在多线程环境里实际创建该子进程的进程。对于普通进程来说,父进程与实际父进程是同一个进程,但对于一个以进程形式存在的POSIX线程,父进程和实际父进程可能是不一样的[2]。
参考资料参见 父进程, 在计算机领域, 英語, 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,图片,音乐,歌曲,电影,书籍,游戏,游戏。