1
下面有关孤儿进程和僵尸进程的描述,说法错误的是?
A.孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。
B.僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
C.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
D.孤儿进程和僵尸进程都可能使系统不能产生新的进程,都应该避免
僵尸进程:子进程先于父进程退出,父进程没有对子进程的退出进行处理,因此子进程会保存自己的退出信息而无法释放所有资源成为僵尸进程导致资源泄露。
孤儿进程:父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程(而孤儿进程的退出,会被1号进程负责任的进行处理,因此不会成为僵尸进程)
根据以上对两种特殊进程的理解分析选项:
- A选项正确,父进程退出后,所有子进程都会成为孤儿进程;
- B选项正确,僵尸进程的产生就是因为父进程没有对子进程的退出进行处理,因此子进程无法完全释放资源
- C选项正确,子进程成为孤儿进程后被1号进程收养,并且他们的退出状态由1号进程完成处理
- D选项错误,僵尸进程的产生会造成资源泄露需要避免,但是孤儿进程的产生一般都是具有目的性的,并且退出后并不会成为僵尸进程,因此无需特殊处理。
2
关于僵尸进程,以下描述正确的有?
A.僵尸进程必须使用waitpid/wait接口进行等待
B.僵尸进程最终会自动退出
C.僵尸进程可以被kill命令杀死
D.僵尸进程是因为父进程先于子进程退出而产生的
僵尸进程是指先于父进程退出的子进程程序已经不再运行,但是因为需要保存退出原因,因此资源没有完全释放的进程,
它不会自动退出释放所有资源,也不会被kill命令再次杀死
僵尸进程会产生资源泄露,需要避免
避免僵尸进程的产生采用进程等待(wait/waitpid)方式完成
根据以上理解分析:
- A选项正确,僵尸进程会造成资源泄露,必须使用wait/waitpid接口进行等待处理
- B选项错误,僵尸进程不会完全释放资源退出
- C选项错误,僵尸进程是已经退出运行的进程,无法被杀死
- D选项错误,僵尸进程是子进程先于父进程退出。
3
以下关于孤儿进程的描述正确的有
A.父进程先于子进程退出,则子进程成为孤儿进程
B.孤儿进程会产生资源泄漏
C.孤儿进程运行在系统后台
D.孤儿进程没有父进程
孤儿进程:父进程先于子进程退出,子进程运行在后台,其父进程成为1号进程,退出后由1号进程回收资源,因此不会成为僵尸进程,而是直接释放所有资源
孤儿进程的产生一般都会带有目的性,比如我们需要一个程序运行在后台,或者我们不想一个进程退出后成为僵尸进程之类的需要
根据以上理解分析:
- A选项正确:父进程先于子进程退出,子进程就会成为孤儿进程
- B选项错误:孤儿进程退出不会成为僵尸进程,因此也不会资源泄露
- C选项正确:孤儿进程是运行在后台的
- D选项错误:孤儿进程也有父进程,父进程是1号进程
4
请问孤儿进程会被以下哪一个系统进程接管?
A.syslogd
B.init
C.sshd
D.vhand
孤儿进程:子进程先于父进程退出,运行在后台,父进程成为1号init进程(在centos7中1号进程改名为systemd进程),退出后由1号进程回收资源
- syslogd:系统中的日志服务进程
- init:init进程是内核启动的第一个用户级进程,用于完成处理孤儿进程以及其他的一些重要任务。
- sshd:远程登录服务进程
- vhand:内存置换服务进程
5
以下描述错误的有
A.守护进程:运行在后台的一种特殊进程,独立于控制终端并周期性地执行某些任务。
B.僵尸进程:一个进程 fork 子进程,子进程退出,而父进程没有 `wait`/`waitpid`子进程,那么子进程的进程描述符仍保存在系统中,这样的进程称为僵尸进程。
C.孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,这些子进程称为孤儿进程。(孤儿进程将由 init 进程收养并对它们完成状态收集工作)
D.精灵进程:精灵进程退出后会成为僵尸进程
僵尸进程:子进程先于父进程退出,父进程没有对子进程的退出进行处理,因此子进程会保存自己的退出信息而无法释放所有资源成为僵尸进程导致资源泄露。
孤儿进程:父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程(而孤儿进程的退出,会被1号进程负责任的进行处理,因此不会成为僵尸进程)
守护进程&精灵进程:这两种是同一种进程的不同翻译,是特殊的孤儿进程,不但运行在后台,最主要的是脱离了与终端和登录会话的所有联系,也就是默默的运行在后台不想受到任何影响
根据以上理解分析:
- D错误:精灵进程其实和守护进程是一样的,不同的翻译叫法而已,它的父进程是1号进程,退出后不会成为僵尸进程
6
使用shell时,默认的环境变量放在哪里?
A.~/.bash_profile
B.~/.bash
C./etc/profile.d
D.~/bash
- ~/.bash_profile:用户级的环境配置文件,每个用户目录下都会具有各自的,在用户每次登录系统时被读取,里面所有命令都会被shell执行。包括环境变量的配置命令,因此A正确
- ~/.bash 以及 ~/bash 在linux的用户目录中默认是没有这两个文件的,因此也就不清楚其作用了,因此B和D都是错误的
- /etc/progile.d 这是个目录或者说文件夹,其中包含了系统级的环境配置文件,任意用户登录时都会执行这个目录下的环境配置文件完成环境配置,但是要注意这个是目录并不是保存环境变量配置的配置文件,因此D错误
7
以下哪些命令可以查看环境变量 [多选]
A.echo
B.env
C.set
D.export
- echo 用于输出打印一个变量的内容,包括环境变量
- env 用于打印所有环境变量信息
- set 用于输出打印所有环境配置以及变量信息,不限于环境变量
- export用于设置环境变量
根据题意,选择D,因为D并不是用于查看环境变量的操作。
8
以下描述正确的有 [多选]
A.子进程默认会复制拥有与父进程相同的环境变量
B.环境变量使shell运行环境配置变的更加复杂
C.环境变量可以使用export命令设置
D.删除一个环境变量可以使用unset和rm命令
A和D选项正确,根据选项理解功能即可。
- B选项错误 环境变量设置之后,不需要重启shell,也不需要重新加载文件,只要设置换环境变量就能直接生效,因此可以使运行环境的配置更加灵活简单
- D选项错误 rm只是普通的文件操作指令,无法删除环境变量