首页 > 试题广场 >

关于 Linux 下的进程,论述不正确的是()

[单选题]
关于 Linux 下的进程,论述不正确的是()
  • 僵尸进程会被 init 进程接管,而僵尸进程不会造成资源浪费
  • 子进程的父进程在它之前退出,子进程会被 init 进程接管,它不会造成资源浪费
  • 进程是资源管理的最小单位,而线进程是程序执行的最小单位,Linux 下的线程本质上用进程实现
  • 子进程如果对资源只是进行读操作,那么完全和父进程共享物理地址空间
关于僵尸进程和孤儿进程:

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

如何处理:
孤儿进程将由init接管,成为init的子进程,然后回收资源。
僵尸进程的危害主要是占用进程描述符。在出现大量僵尸进程的时候,系统会杀死产生僵尸进程的父进程(因为僵尸进程的产生主要是因为父进程出错,没有获取子进程的状态)。在杀死父进程后,僵尸进程就会全部变成孤儿进程,由Init接管,回收资源


发表于 2022-02-16 09:37:20 回复(2)
A
僵尸进程在父进程结束后会被Init进程wait,释放掉资源。
而孤儿进程在产生的时候就会被1号进程所收养,会直接回收资源,也就不会占用资源。
发表于 2015-07-10 11:41:38 回复(1)
A
孤儿进程才会被init接管
发表于 2015-02-16 16:01:06 回复(0)

孤儿进程:

孤儿进程指的是父进程先于子进程结束,而子进程还在运行的情况。当父进程结束时,子进程会被操作系统接管,并由init进程(进程ID为1的进程)作为新的父进程。孤儿进程不会造成系统资源的浪费,但它们可能会继续运行并占用系统资源,直到它们自己结束。可能会导致init进程过度负荷,降低系统性能

僵尸进程:

僵尸进程指的是子进程先于父进程结束,但父进程没有及时处理子进程的退出状态。当子进程结束时,它的退出状态信息会被保留在系统中,此时子进程成为僵尸进程。僵尸进程占用了系统的进程表资源,如果系统中存在大量僵尸进程,可能会导致进程表资源耗尽。通常,父进程需要调用wait()或waitpid()等系统调用来获取子进程的退出状态,以及释放僵尸进程的资源。占用系统资源,包括进程表项和一些系统内存

发表于 2023-11-08 19:40:52 回复(0)
a
发表于 2015-01-07 17:12:27 回复(0)
1.2 孤儿进程:失去父亲的孩子
定义:当父进程提前退出,而子进程仍在运行时,子进程就成为孤儿进程。
命运:孤儿进程会被 init 进程(进程号为 1)收养,由 init 进程负责回收其资源。

// 生活类比:
// 父进程如同父母,子进程如同孩子
// 若父母先离世,孩子会被社会福利机构(init进程)收养
AI写代码
1.3 僵尸进程:未被回收的 "灵魂"
定义:子进程退出后,若父进程未调用wait()或waitpid()获取其状态,子进程就会变成僵尸进程。
特征:僵尸进程已释放大部分资源,但仍保留进程描述符(包含 PID、退出状态等信息)。

// 生活类比:
// 子进程如同完成任务的员工
// 若老板(父进程)不接收工作汇报(调用wait),员工的工位(进程描述符)会一直被占用
AI写代码
二、问题与危害:为什么需要关注它们?
2.1 僵尸进程的危害:资源泄漏的隐患
技术原理
每个进程占用一个唯一的 PID(进程号),系统 PID 数量有限(通常 32768 个)
僵尸进程不释放 PID 资源,大量存在会导致系统无法创建新进程
内核会为每个僵尸进程保留一定信息(退出状态、运行时间等),长期积累会消耗系统资源
实际场景
想象一个日志服务进程,定期创建子进程处理日志文件:

while(1) {
    pid = fork();
    if(pid == 0) {
        // 子进程处理日志后退出
        exit(0);
    }
    // 父进程不调用wait,继续循环
    sleep(1);
}
AI写代码
若父进程不回收子进程,每处理一次日志就会产生一个僵尸进程,最终导致系统 PID 耗尽。

2.2 孤儿进程的安全性:init 进程的妥善处理
处理机制
孤儿进程的父进程被设置为 init(PID=1)
init 进程会周期性调用wait()回收所有已退出的子进程
孤儿进程退出时,init 会立即处理,不会产生资源泄漏
类比说明
// init进程如同社会福利机构
// 每个孤儿进程(失去父进程的子进程)都会被init收养
// 当孤儿进程"去世"时,init会负责处理其后事(回收资源)
AI写代码
2.3 进程状态转换:从生到死的旅程
通过ps -ef或ps -o pid,ppid,state,tty,command可以查看进程状态,其中:

R:运行中
S:睡眠
Z:僵尸状态(Zombie)
T:停止
僵尸进程的状态始终为Z,直到被父进程回收或父进程退出。

参考博客:[00:00:16] Linux 中的孤儿进程与僵尸进程-CSDN博客
发表于 2025-07-01 16:33:33 回复(0)
杀死父进程后,僵尸进程就会全部变成孤儿进程,由Init接管,回收资源
发表于 2023-10-07 07:39:04 回复(0)
A
僵尸进程在父进程结束后会被Init进程wait,释放掉资源。
而孤儿进程在产生的时候就会被1号进程所收养,会直接回收资源,也就不会占用资源。
发表于 2022-02-14 08:40:20 回复(0)
孤儿进程:父进程先于子进程结束,init接管子进程成为子进程的父进程;
僵尸进程:父进程没有结束且不管子进程,子进程没人管成为僵尸进程,消耗系统资源
编辑于 2024-01-14 17:11:32 回复(0)
僵尸进程不会被init接管
发表于 2022-07-15 18:47:04 回复(0)