我有一个Perl程序,我正在管理它能够分叉多个进程(达到指定的限制),监视它们,当它们退出时,分叉其他进程(再次,达到极限),直到要运行的事物列表完成.它工作正常,除了某些原因它似乎没有从我的子进程中获取正确的退出状态.
不工作的代码使用Perl的fork(),waitpid()和子进程使用POSIX::_exit()戒烟.以下是相关代码的一些摘录:
分叉代码:
# Initialize process if running in parallel mode
my $pid;
if ($options{'parallel'} > 0) {
log_status("Waiting to fork test #".$curr_test{'id'}."...\n");
# Here, wait for child processes to complete so we can fork off new ones without going over the specified limit
while ( keys(%children) >= $options{'parallel'}) {
my $kid = waitpid(-1, 0);
my $kid_status = $?;
if ($kid > 0) {
log_status("Child process (PID ".$kid.", test ".$children{$kid}.") exited with status ".$kid_status.".\n"); …Run Code Online (Sandbox Code Playgroud)