同じ目的で設計されたさまざまな言語 (Perl、Java、R) で記述されたプログラムをベンチマークおよび比較するためのスクリプトを開発しています。同時に 2 つのサブルーチンを実行する必要があります。1 つは Unix TOP コマンドを使用するため、もう 1 つはプログラムを実行するためです。Parallel::ForkManager を使用しようとしています。ここで、フォークに使用しているコードの一部:
sub parallelRun{
$commands[0]= sub{topExec};
$commands[1]= sub{masExec};
my $manager = new Parallel::ForkManager( 2 );
for($i=0; $i <= $#commands; $i++) {
$pid = $manager-> start and next;
push(@pid,$pid);
$commands[$i]();
$manager-> finish;
} # For End
$manager->wait_all_children;
$manager-> finish($pid[0]);
undef(@pid);
} # Sub End
topExec()
終了したら(TOP の実行)終了する必要がありmasExec()
ますが、TOP コマンドの後にスクリプトがハングしています。
おまけの質問: 実行されたプログラムのシステム pid を取得masExec()
して TOP コマンドで追跡する方法はありますか? 現在、Unix Top コマンド (サブ topExec) のユーザーとコマンドの列から追跡しています。
言語エラーで申し訳ありません(どちらもネイティブではありません;))。