eval {
local $SIG{ALRM} = sub { die "alarm clock restart" };
alarm 10;
flock(FH, 2); # blocking write lock
alarm 0;
};
if ($@ and $@ !~ /alarm clock restart/) { die }
如果超时的操作是system()或qx(),则此技术可能会生成僵尸。如果这对你很重要,你需要自己做fork()和exec(),并杀死错误的子进程。
我有一个类似的代码,其中超时的操作是system()或qx()。
关于僵尸的坏处是他们消耗记忆还是僵尸有更多伤害的方法?
答案 0 :(得分:12)
主要问题是它们使用进程表槽。 Linux的进程表可以容纳64k条目,因此除非你在没有清理僵尸的情况下进行大量分析,否则这不会导致问题。我希望大多数(如果不是全部)其他现代* nix都具有相同大小的进程表。但是,当你运行ps
时,它确实看起来很丑陋。
内存不是一个真正的问题,因为每个僵尸只占用几个字节来记录其退出状态。
答案 1 :(得分:8)
它们消耗了进程表中的内存和空间。