日度归档:2011 年 9 月 23 日

Linux 僵死进程的避免

今天读《UNIX 环境高级编程》第八章进程控制,其中讲到了僵死进程,它的定义是这样的:

在 UNIX 术语中,一个已经终止,但其父进程尚未对其进行善后处理(获取终止进程的有关信息,释放它仍占有的资源)的进程被称为僵死进程( zombie )。

如果编写一个长期运行的程序,它调用 fork 产生了很多子进程,那么除非父进程等待取得子进程的终止状态,否则这些子进程终止后就会变成僵死进程。

这使我想起了在实习期间负责的一个项目。程序使用了一大块共享内存,使用哈希表存储数据。我希望能够在运行时定期输出内存的使用率,这虽然不是一个必须的功能,但对调试和运维会有一些帮助。不过对大块内存的扫描会消耗数百毫秒的时间,这样的延迟对一个提供实时服务的程序来说是不可容忍的。

继续阅读