10

来自perlipc/信号

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()。

僵尸的坏处是它们消耗内存还是僵尸可以伤害的方式更多?

4

2 回答 2

12

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

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

于 2011-03-18T12:23:35.090 回答
8

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

于 2011-03-18T10:17:35.400 回答