Perl ユーティリティ/モジュール「証明」をいくつかの単体テストのテスト ハーネスとして使用しようとしています。単体テストは、テストの一部としていくつかのバックグラウンド プロセスをフォークする必要があるため、「単体」というよりも「システム」に近いものです。以下を使用して...
sub SpinupMonitor{
my $base_dir = shift;
my $config = shift;
my $pid = fork();
if($pid){
return $pid;
}else{
my $cmd = "$base_dir\/..\/bin\/monitor_real.pl -config $config -test";
close STDOUT;
exec ($cmd) or die "cannot exec test code [$cmd]\n";
}
}
sub KillMonitor{
my $pid = shift;
print "Killing monitor [$pid]\n";
kill(1,$pid);
}
ただし、何らかの理由で、.t ファイルにいくつかの余分なプロセスをスピンアップさせると、すべてのテストが終了した後、次のファイルに進むか終了するのではなく、最初の .t ファイルの最後でテスト ハーネスがハングします。 1つしかない場合。
最初は、サブプロセスを強制終了し、機能しないままにしていたためではないかと思いました。だから私は追加しました..
$SIG{CHLD} = \&REAPER;
sub REAPER {
my $pid = wait;
$SIG{CHLD} = \&REAPER;
}
コードに。しかし、それは役に立ちません。実際、閉じた検査では、私の perl テスト ファイルが終了し、現在は機能していないプロセスであり、その子を取得していない証明ラッパー スクリプトであることが判明しました。実際、テストスクリプトの最後に die() 呼び出しを追加すると...
# Looks like your test died just after 7.
私のスクリプトは終了しましたが、何らかの理由でハーネスが解けません。
テストが失敗し、ハーネスが正常に終了したときにサブプロセスを無効にしたときのように、それを混乱させているのは間違いなく私のサブプロセスであることを確認しました.
何らかの方法でハーネスを混乱させる可能性のあるプロセスを開始する方法に間違っていることはありますか?