作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个脚本,在某些部分我 fork 了一些进程来完成任务,主进程等待所有子进程完成。
到目前为止一切正常。
问题:我想知道每个子进程在处理它必须做的事情时花费的最大时间。
我现在所做的只是查看打印子进程执行的每个操作花费的时间的日志,并尝试计算出或多或少的时间。
我知道从子进程取回某些东西的唯一方法是通过某种共享内存,但我想知道对于这个特定问题是否有“现成”/简单的解决方案?
我的意思是为了恢复时间,父进程在一个地方以漂亮的方式打印它们。
我认为可能有比检查所有日志更好的方法....
根据评论更新:
我对子进程的时间不感兴趣,即哪个 child 花了最多的时间来完成。每个子进程都在处理 X 个任务。每项任务最坏情况下需要 Y 秒才能完成。我正在寻找 Y,即子进程完成 X 任务之一所花费的最多时间
最佳答案
fork()
最大的限制是它不像threads
那样容易进行IPC。除了在进程启动和退出时进行捕获之外,您在其他方面所做的事情有完整的 perl 文档片段。
我的建议是,您可能需要一个管道
并将其连接到子项。
类似这样的东西(尚未测试,我在 Windows 机器上!)
use strict;
use warnings;
use Parallel::ForkManager;
my $manager = Parallel::ForkManager -> new ( 5 ) ;
pipe ( my $read_handle, my $write_handle );
for ( 1..10 ) {
$manager -> start and next;
close ( $read_handle );
print {$write_handle} "$$ - child says hello!\n";
$manager -> finish;
}
close ( $write_handle );
while ( <$read_handle> ) { print; }
$manager -> wait_all_children();
关于linux - 如何从子进程中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511930/
我是一名优秀的程序员,十分优秀!