diff options
author | Hieu Hoang <hieuhoang@gmail.com> | 2015-04-30 10:45:25 +0300 |
---|---|---|
committer | Hieu Hoang <hieuhoang@gmail.com> | 2015-04-30 10:45:25 +0300 |
commit | ebc5a51d320843e9579c8e0e42486090aed612c8 (patch) | |
tree | a3677ed6798a9cb2287b347066fdc51328618198 /scripts | |
parent | 1c99b2b2b849be7530468a611d56f42a8c4ed2f0 (diff) | |
parent | c116fa0dbfd484463318aa05da8ed9ee2c7a2de0 (diff) |
Merge pull request #111 from unhammer/extract-perl-safewait
die if the forked extract exited with error
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/generic/extract-parallel.perl | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/scripts/generic/extract-parallel.perl b/scripts/generic/extract-parallel.perl index 2b2b4333d..ebfe6639a 100755 --- a/scripts/generic/extract-parallel.perl +++ b/scripts/generic/extract-parallel.perl @@ -150,9 +150,8 @@ for (my $i = 0; $i < $numParallel; ++$i) print "glueArg=$glueArg \n"; my $cmd = "$extractCmd $TMPDIR/target.$numStr $TMPDIR/source.$numStr $TMPDIR/align.$numStr $TMPDIR/extract.$numStr $glueArg $otherExtractArgs $weightsCmd --SentenceOffset ".($i*$linesPerSplit)." 2>> /dev/stderr \n"; - print STDERR $cmd; - `$cmd`; + safesystem($cmd) or die; exit(); } else @@ -164,6 +163,10 @@ for (my $i = 0; $i < $numParallel; ++$i) # wait for everything is finished foreach (@children) { waitpid($_, 0); + if($? != 0) { + print STDERR "ERROR: Failed to execute: @_\n $!\n"; + exit(1); + } } # merge @@ -326,3 +329,22 @@ sub NumStr($) return $numStr; } +sub safesystem { + print STDERR "Executing: @_\n"; + system(@_); + if ($? == -1) { + print STDERR "ERROR: Failed to execute: @_\n $!\n"; + exit(1); + } + elsif ($? & 127) { + printf STDERR "ERROR: Execution of: @_\n died with signal %d, %s coredump\n", + ($? & 127), ($? & 128) ? 'with' : 'without'; + exit(1); + } + else { + my $exitcode = $? >> 8; + print STDERR "Exit code: $exitcode\n" if $exitcode; + return ! $exitcode; + } +} + |