所有分叉实例共享一个变量?

时间:2013-09-20 16:20:33

标签: linux perl unix fork

我有一个Perl脚本,它反复出现问题。我希望收集有关每个分叉实例的统计信息:它是通过还是失败以及总共有多少个实例。对于此任务,有没有办法创建一个跨所有实例共享的变量?

我的perl版本是v5.8.8。

2 个答案:

答案 0 :(得分:2)

您应该以某种形式或形式使用IPC,最常见的是具有信号量保护访问权限的共享内存段。或者,您可以使用某种混合内存/磁盘数据库,其中访问API将为您处理并发访问,但这可能是一种矫枉过正。最后,您可以使用具有记录锁定的文件。

答案 1 :(得分:2)

IPC::Shareable做你真正要求的。每个进程都必须注意锁定和解锁共享哈希(例如),但数据似乎是跨进程共享的。

但是,普通的UNIX设施提供了收集工作人员状态和计数的更简单方法(恕我直言)。例如,当END {}时,让每个进程写入($| = 1)“ok \ n”或“not ok \ n”,并确保它们写入FIFO,因为相对较短的写入不会交错。然后捕获该输出(例如,./my-script.pl | tee /tmp/my.log),你就完成了。另一种方法是让他们在简单的文件中记录他们的状态 - open(my $status, '>', "./status.$$") - 在专门为此准备的目录中。