2011-03-18 104 views
10

perlipc/Signals僵尸如何伤害?

eval { 
    local $SIG{ALRM} = sub { die "alarm clock restart" }; 
    alarm 10; 
    flock(FH, 2); # blocking write lock 
    alarm 0; 
}; 
if ([email protected] and [email protected] !~ /alarm clock restart/) { die } 

如果正在超时操作系统()或QX(),这种技术是容易产生僵尸。如果这对你很重要,你需要做你自己的fork()和exec(),并杀死错误的子进程。

我有一个类似的代码,其中被超时的操作是system()或qx()。

僵尸会消耗记忆力吗?僵尸会伤害更多吗?

+0

是的,僵尸会伤害更多的方式,比如吃掉你的大脑。 – 2013-06-10 02:46:41

回答

12

主要问题是它们消耗了进程表槽。 Linux的进程表可以容纳64k个条目,所以这不可能导致问题,除非你在没有清理僵尸的情况下进行大量分叉操作。我期望大多数(如果不是全部的话)其他现代* nixes具有相同大小的进程表。但是,当您运行ps时,确实看起来很难看。

内存并不是真正的问题,因为每个僵尸只占用几个字节来记录它的退出状态。

8

它们消耗进程表中的内存和空间。

+19

和大脑。不要忘记大脑 – 2011-03-18 12:23:47