【发布时间】:2012-06-03 04:02:27
【问题描述】:
所以我有以下代码,问题是它在所有子进程(排序/gzip)完成之前就退出了。如何指示 Perl 等待所有后代进程?
#!/usr/bin/perl
use strict;
use warnings;
sub systemBash {
my $cmd = shift;
my @args = ( "bash", "-c", $cmd );
print "command ".$cmd."\n";
system(@args);
if($? != 0){
die "Command ".Dumper(@args)." failed";
}
}
print "start";
systemBash("yes |head -n 1000000|awk '{print rand()}' > >(sort |gzip -9 -c > /dev/null)");
print "done";
【问题讨论】:
-
在我系统的 bash 中运行 "yes |head -n 1000000|awk '{print rand()}' > >(sort |gzip -9 -c > /dev/null)" 导致一个错误。首先尝试测试您想在 shell 中运行的内容。
-
mxedeler,从这里运行良好。 madreblu,您的代码似乎也从这里运行良好。你期待它做什么?
-
OmnipotentEntity:如果您检查 htop,您会看到在程序打印“完成”后 sort + gzip 仍在运行。我希望 perl 脚本在一切真正完成时打印完成(所有后代都死了)。
-
一个简单的谷歌“perl 等待子进程”会给你解决方案。