httpd <defunct>是什么?

12
32537 apache    16   0 87424  15m 7324 S  2.3  0.3   0:00.52 httpd              
 3302 mysql     15   0  156m  41m 4756 S  1.3  0.7  10:50.91 mysqld             
  489 apache    16   0 87016  14m 6692 S  0.7  0.2   0:00.27 httpd              
  990 apache    15   0     0    0    0 Z  0.7  0.0   0:00.12 httpd <defunct>    
  665 apache    15   0 86992  13m 5644 S  0.3  0.2   0:00.20 httpd              
32218 apache    15   0 87356  14m 6344 S  0.3  0.2   0:00.53 httpd              
    1 root      15   0  2160  640  556 S  0.0  0.0   0:01.18 init  

top命令中偶尔可以看到httpd <defunct>,它是做什么的?

我发现Web服务器有时无法响应FPDF(在用户请求时打印PDF)。这与之相关吗?

更新,包含加载信息:

top - 11:55:59 up 17:30,  6 users,  load average: 0.53, 0.47, 0.80
Tasks: 322 total,   1 running, 320 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.7%us,  0.2%sy,  0.0%ni, 95.1%id,  3.9%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   6219412k total,  5944068k used,   275344k free,    21024k buffers
Swap:  5140792k total,       96k used,  5140696k free,  5270708k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
 1951 apache    16   0     0    0    0 Z  0.9  0.0   0:00.33 httpd <defunct>    
 2267 apache    15   0 86992  13m 5876 S  0.9  0.2   0:00.22 httpd              
 3302 mysql     15   0  156m  41m 4756 S  0.9  0.7  11:43.72 mysqld             
 2220 apache    15   0 87204  14m 6496 S  0.6  0.2   0:00.28 httpd              
 2340 apache    15   0 87828  13m 5588 S  0.6  0.2   0:00.22 httpd              
 2341 apache    17   0 88236  14m 5564 S  0.6  0.2   0:00.15 httpd              
  842 apache    16   0 87432  15m 7180 S  0.3  0.2   0:00.81 httpd              
 2225 apache    18   0 88236  14m 5560 S  0.3  0.2   0:00.17 httpd              
 2401 apache    15   0 86916  12m 5344 S  0.3  0.2   0:00.11 httpd              
    1 root      24   0  2160  640  556 S  0.0  0.0   0:01.18 init               
3个回答

16

一个不可用的进程是指已经退出但其父进程尚未等待读取其退出状态而在进程表中留下条目的进程。也称为僵尸进程。有关更多信息,请参阅维基百科文章


如果这些进程占用了太多的内存空间,我可以杀死它们而不影响其他进程吗? - diggy
1
@diggy 已经退出的进程无法被终止。我认为它已经或将很快释放其资源。 - tvanfosson

3

已停止的进程通常是指已经完成任务的进程,但操作系统仍然保留该进程,直到父进程调用等待函数以"收集"其状态。当您编写自己的"forky"代码并存在错误时,才会经常看到此类情况。

如果您使用

ps -Hwfe

你将看到进程层次结构以及父进程是什么。奇怪的是它是一个 httpd 进程,通常它很擅长收集子进程。除非你的系统处于极限状态,这也是你首先使用 top 的原因...

CPU 相当空闲(请参见问题的更新部分)。从用户(浏览器)的角度来看,主要的抱怨是 PDF 创建偶尔失败。 - ohho

2

当一个进程在Unix上死亡时,它会向其父进程发送退出代码。一个"僵尸"进程或者说是"defunct process"指的是它的父进程还没有查看过该僵尸进程的退出代码。一旦父进程通过使用 "wait" 系统调用获取了退出代码,该僵尸进程就会消失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接