my $prefork_pid = $$; if ( defined( my $kid = fork ) ) { unless ($kid) { # Launch the external update/restart script. exec( "perl", "$script_path", "$local_port", ); } print "This always prints...\n"; # Try dying gracefully first, then less so. kill 15, $prefork_pid; sleep 5; kill 2, $prefork_pid; sleep 5; kill 9, $prefork_pid; print "This never prints... So it died, alright.\n"; } #### my ($local_port) = @ARGV; # When on Win32, nap until OS clears its port. my $i = 50; while ($i && ($^O =~ /Win32/i)) { my @netstat = split "\n", `netstat.exe -a -p tcp`; print "Waiting up to $i passes...\n"; foreach (@netstat) { next unless $_ =~ $local_port; print "$i: \t$_\n"; sleep 60 if $_ =~ /(ESTABLISHED|LISTENING|WAIT)/; } --$i; }