趣味答题

导航菜单



当前位置: 首页  /  科技  /  正文

孤儿进程:解密Linux系统编程中最特殊的进程

阅读:56

孤儿进程:解密Linux系统编程中最特殊的进程

01. 孤儿进程概述

父进程运行结束,但子进程还在运行的子进程就称为孤儿进程(Orphan Process)。孤儿进程最终会被 init 进程(进程号为 1 )所收养,并由 init 进程对它们完成状态收集工作。

孤儿进程是没有父进程的进程,为避免孤儿进程退出时无法释放所占用的资源而变为僵尸进程,进程号为 1 的 init 进程将会接受这些孤儿进程,这一过程也被称为“收养”。init 进程就好像是一个孤儿院,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init ,而 init 进程会循环地 wait() 它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init 进程就会代表党和政府出面处理它的一切善后工作。因此孤儿进程并不会有什么危害。

注意:

在有些启动图形界面的系统中,有些收养孤儿进程的并不一定是1号进程。

02. 孤儿进程代码

孤儿进程代码

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

int main(void)

{

int i = 0;

pid_t pid = -1;


//孤儿进程

pid = fork();

if (-1 == pid)

{

perror("fork");

goto err0;

}

else if (0 == pid)

{

while(i < 10)

{

printf("I am child process %d --> %d\n", getpid(), i++);

sleep(2);

}

exit(0);

}

return 0;

err0:

return 1;

}

测试结果:


03. 附录

标签

Linux系统编程特殊进程孤儿


相关文章列表

Linux系统编程:探索Linux进程调度的奥秘

Linux系统编程:探索Linux进程调度的奥秘

01. 概述操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说“某某函数比某某函数效率高XX倍”一样,脱离了实际...


微软跨界!Linux发行版现已支持XFS根文件系统

微软跨界!Linux发行版现已支持XFS根文件系统

当许多Linux发行版在评估新的根文件系统选项或甚至像OpenZFS这样的特性,微软内部Linux发行版到本月才开始支持XFS作为根文件系统选项。随着这个月对微软内部Linux发行版CBL-Marin...


安卓系统是开源的,是全球程序员的共同劳动成果,为什么总有人认为谷歌可以禁用安卓?

安卓系统是开源的,是全球程序员的共同劳动成果,为什么总有人认为谷歌可以禁用安卓?

安卓系统是一个由Google公司开发和拥有的操作系统,是目前全球最受欢迎的移动操作系统之一。尽管安卓系统是开源的,但仍然有人担心安卓会受到限制或禁用,这主要是因为以下几个原因:商业利益:Google是...


1979年,解放军重返越南执行特殊任务

1979年,解放军重返越南执行特殊任务

一、一个特殊的任务1979年3月5日,打进越南的解放军都开始回撤国内。至3月9日,解放军124师部队已经过越南复和县,国境线已遥遥在望。然而3月10日凌晨2时,一支200余人的部队突然集合在124师指...


揭秘少儿编程热潮背后的原因

揭秘少儿编程热潮背后的原因

少儿编程为什么越来越火了?随着科技的快速发展和普及,编程技术在现代社会中的重要性越来越被人们所认识和重视。编程技术不仅是计算机领域的核心技术,还在很多领域中得到了广泛应用,例如物联网、人工智能、大数据...


网上有对于C++编程要避免使用cin、cout、fstream;而是使用scanf、printf、FILE *的说法, 请问是正确的吗?

网上有对于C++编程要避免使用cin、cout、fstream;而是使用scanf、printf、FILE *的说法, 请问是正确的吗?

这种说法是有些片面的。在说明原因之前,需要了解一些基础的知识。C++中,cin、cout、fstream等是C++标准库的流输入输出,而scanf、printf、FILE *则是C语言中的标准输入输出...


友情链接