我有一个反复分叉的 Perl 脚本。我希望收集有关每个分叉实例的统计信息:它是通过还是失败以及总共有多少个实例。对于这个任务,有没有办法创建一个在所有实例之间共享的变量?
我的 perl 版本是 v5.8.8。
IPC::Shareable 可以满足您的实际要求。每个进程都必须小心锁定和解锁共享哈希(例如),但数据似乎是跨进程共享的。
但是,普通的 UNIX 工具提供了更简单的方法(恕我直言)收集工人状态和计数。例如,让每个进程$| = 1
在 END{} 结束时写入 ()“ok\n”或“not ok\n”,并确保它们正在写入 FIFO,因为相对较短的写入不会被交错。然后捕获该输出(例如,./my-script.pl | tee /tmp/my.log
),您就完成了。另一种方法是让他们在简单的文件中记录他们的状态open(my $status, '>', "./status.$$")
——在一个专门为此准备的目录中。
您应该以某种形式或形式使用 IPC,最常见的是共享内存段,带有信号量保护对其的访问。或者,您可以使用某种混合内存/磁盘数据库,其中访问 API 将为您处理并发访问,但这可能是一种矫枉过正。最后,您可以使用带有记录锁定的文件。