つの選択肢:それはそれは些細なfork
+ exec
よりも短いですし、それがコマンドにexec
エラーをmisattributeていないので、あなたは些細なfork
+のように起動するので、私はopen3
を使用
use IPC::Open3 qw(open3);
sub launch {
open(local *CHILD_STDIN, '<', '/dev/null') or die $!;
return open3('<&CHILD_STDIN', '>&STDOUT', '>&STDERR', @_);
}
my %children;
for my $cmd (@cmds) {
print "Command $cmd started at ".localtime."\n";
my $pid = launch($cmd);
$children{$pid} = $cmd;
}
while (%children) {
my $pid = wait();
die $! if $pid < 1;
my $cmd = delete($children{$pid});
print "Command $cmd ended at ".localtime." with \$? = $?."\n";
}
exec
。
use threads;
my @threads;
for my $cmd (@cmds) {
push @threads, async {
print "Command $cmd started at ".localtime."\n";
system($cmd);
print "Command $cmd ended at ".localtime." with \$? = $?."\n";
};
}
$_->join() for @threads;
あなたは終わりの時またはちょうど開始時間をログに記録しますか?プロセスが開始されたときにどのような情報を記録したいのですか、プロセスが終了したときにどのような情報を記録したいですか? – ikegami