#! /bin/sh exec ${H2O_PERL:-perl} -x $0 "$@" #! perl use strict; use warnings; use Errno qw(EINTR); use POSIX qw(WNOHANG); my $rmpath; while (@ARGV) { if ($ARGV[0] eq '--') { shift @ARGV; last; } elsif ($ARGV[0] !~ /^--/) { last; } elsif ($ARGV[0] =~ /^--rm(?:=(.*)|)$/) { shift @ARGV; if (defined $1) { $rmpath = $1; } else { die "option `--rm` requires an argument\n" unless @ARGV; $rmpath = shift @ARGV; } } else { die "unknown argument: $ARGV[0]"; } } shift @ARGV if @ARGV && $ARGV[0] eq '--'; die "Usage: $0 [--rm=path] -- cmd args...\n" unless @ARGV; open my $wait_fh, '<&', 5 or die "failed to open wait file descriptor (fd=5):$!"; my $pid = fork; die "fork failed:$!" if $pid == -1; if ($pid == 0) { exec @ARGV; die "failed to exec $ARGV[0]:$!"; } $SIG{INT} = sub {}; while (1) { my $r = sysread $wait_fh, my $buf, 1; last if !defined($r) || $r == 0 || ($r == -1 && $! != EINTR); } kill 'TERM', $pid; while (waitpid($pid, 0) != $pid) { } if (defined $rmpath) { exec '/bin/rm', '-rf', $rmpath; die "failed to exec /bin/rm:$!"; }