- unless (defined $pid) {
- if ($!{EAGAIN}) {
- warn "Failed to fork: $!\n";
- if ($retry++ < $retrymax) {
- warn "(sleeping...)\n";
- sleep $nap;
- } else {
- $nap *= 2;
- $retry = 0;
- }
- redo;
- } else {
- die "Failed to fork: $!\n" unless defined $pid;
- }
- }
- } until (defined $pid);
-
- unless ($pid) {
+ die "Failed to fork: $!\n" unless defined $pid;
+ last unless $pid; # Child.
+ }
+
+ if ($pid) {
+ # Parent.
+ warn "(waiting)\n";
+ 1 until -1 == wait; # Reap.
+ } else {