僵尸进程和孤儿进程
1.什么是进程?
程序:程序是指令和数据的集合
进程:进程就是程序的一次执行过程,是系统进行资源分配和调度的独立单位
2.为什么需要进程?
引入多道程序技术后为了方便管理,完成对各个程序的并发执行,引入了进程
3.如何操作进程?
操作系统为了能够使每个程序能够独立运行,在操作系统中为其配置了一个数据结构,也就是我们通常所说的PCB(Process Control Block),PCB 是进程运行相关的信息集合。
孤儿进程:
父进程运行结束,但子进程还在运行(未运行结束)的子进程就称为孤儿进程。孤儿进程最终会被init进程(进程号为1)所收养,因此init进程此时变成孤儿进程的父进程,并由init进程对它们完成状态收集工作。(linux下,init是内核启动的第一个用户级进程,init有许多很重要的任务,比如像启动getty(用于用户登录)、实现运行级别、以及处理孤立进程。)
僵尸进程:
一个进程使用fork创建子进程,如果子进程退出执行后,父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。
如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。所以僵尸进程是有危害的。
守护进程:
守护进程也就是通常说的Daemon进程(精灵进程),是Linux中的后台服务进程,是个特殊的孤儿进程。它是一个生存期较长的进程,通常独立于控制终端(不会因为控制终端被关闭而中断)并且周期性地执行某种任务或等待处理某些发生的事件。举例:nignx、mysql、cron都是守护进程。
父进程、子进程:
父进程和子进程的关系是:子进程是父进程的一个副本,一个父进程能创建多个子进程,创建子进程能并发执行。一般来说,子进程先结束执行,然后父进程负责子进程的一些善后工作(回收资源)。