流程仍然落后

流程仍然落后

我的嵌入式系统在运行几个小时后没有响应。经过调查,我发现系统不断增加进程列表<defunct>。运行ps axl会给出一个长列表,其中一个片段如下:

1     0  6421     1  20   0      0     0 exit   Zs   ?          0:00 [timeout] <defunct>
1     0  6429     1  20   0      0     0 exit   Zs   ?          0:00 [timeout] <defunct>
1     0  6476     1  20   0      0     0 exit   Zs   ?          0:00 [timeout] <defunct>
1     0  6497     1  20   0      0     0 exit   Zs   ?          0:00 [timeout] <defunct>

我无法终止这些进程。这些进程的增加会耗尽所有 RAM,从而使系统失去响应。另一个问题是,<defunct>当我尝试终止启动时由 init 脚本运行的进程时,它们也会消失。我找不到任何线索来说明为什么这些僵尸进程没有被 init 杀死并耗尽 RAM。

答案1

已失效的进程不会占用任何重要的内存,仅占用少量字节来存储其 pid、返回状态和资源使用统计信息。

然而,在正确运行的 Unix/Linux 操作系统上,由 init 为父的失效进程应该会被后者快速回收。

您的系统存在严重的错误,这也可能解释您所观察到的内存泄漏。

答案2

正如其他人一样,我怀疑这些失效的进程是否使用了任何大量的 RAM,您还可以在ps给出的输出中看到,详细说明内存使用情况的列中有零。

Defnct(或僵尸 - 这就是 Z 的来源)进程无法被杀死,它们只会在进程表中徘徊,直到其父进程读取其退出状态 - 因此您应该修复父进程。

答案3

使用 #ps auxwww 寻找僵尸 | grep -w Z | | grep -w Z | grep 已失效 | grep -v grep

检查这些僵尸进程的父进程 ID 并杀死它。

答案4

问题的根本原因是硬件故障。ttyS1系统端口每秒接收数千个中断,这反过来又导致kworker.这导致了进程堆的创建<defucnt>并且未被清理initinit正如 @jilliagre 所建议的,这可能是错误。

禁用gettyttyS1解决了问题。

相关内容