目前,在我的 Perl 脚本中,我进行如下调用:
system(" ./long_program1 & ./long_program2 & ./long_program3 & wait ");
我希望能够记录每个长时间运行的命令执行的时间,同时仍然异步执行它们。我知道系统调用会导致 perl 进行分叉,那么这样的事情可能吗?这可以用多个 perl fork() 和 exec() 调用来代替吗?
请帮助我找到更好的解决方案。
当然是。您可以为每个要执行的程序分叉一个子进程。
你可以做system()
or exec()
分叉后,取决于系统调用完成后您希望 Perl 代码执行多少处理(因为 exec() 的功能与system(); exit $rc;
)
foreach my $i (1, 2, 3) {
my $pid = fork();
if ($pid==0) { # child
exec("./long_program$i");
die "Exec $i failed: $!\n";
} elsif (!defined $pid) {
warn "Fork $i failed: $!\n";
}
}
1 while wait() >= 0;
请注意,如果您需要进行大量分叉,最好通过以下方式控制它们Parallel::ForkManager而不是手动进行分叉。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)