在linux内核下,一个进程可以有7个状态,分别是
“R”(running)运行状态
“S”(sleeping)睡眠状态
“D”(disk sleeping)不可中断睡眠状态,在这个状态的进程通常会等待IO的结束
“T”(stopped)中止状态
“t”(tracing stopped)阻塞状态
“X”(dead)死亡状态,只是一个函数do_exit()返回的状态
“Z”(zombie)僵死状态
僵死状态是一个比较特殊的状态,下面我们重点介绍一下僵死状态。
1 僵死进程的产生
当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵死进程。
僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
僵死进程的定义
一个子进程在其父进程没有调用wait()或waitpid()的情况下退出,这个子进程就是僵尸进程。
如果其父进程还一直存在而不调用wait(),则该僵尸进程无法收回,等到其父进程退出后被init收回。
僵尸进程的危害
僵尸进程会占用系统资源,如果很多,会严重影响服务器的性能。
(1)有一个创建维持30秒的僵死进程的例子
运行结果如下图所示
(2)僵尸进程代码2
运行结果如下图所示
2 孤儿进程
孤儿进程的定义
一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被
init进程(进程号为1)所收养,并有init进程对他们完成状态收养工作。
下面是一段孤儿进程的代码
运行结果如下图所示