Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

63 řádky
1.3 KiB

  1. #!/usr/bin/env perl
  2. #
  3. # hatimerun in perl, sorta
  4. #
  5. use Getopt::Long;
  6. my $opt_exitcode = 99;
  7. my $opt_killcode = 9;
  8. my $opt_timeout = 60;
  9. GetOptions( 'e=i' => \$opt_exitcode,
  10. 'k=i' => \$opt_killcode,
  11. 't=i' => \$opt_timeout,
  12. 'h' => \&opt_help,
  13. 'help' => \&opt_help,
  14. );
  15. sub opt_help{
  16. my $message = <<__END__;
  17. UX: ERROR: invalid syntax
  18. usage: [-e return code][-k kill signal][-t seconds to wait]
  19. [-h][--help]
  20. Options
  21. --help, -h Prints this help text.
  22. -e Exit code to return on timeout.
  23. NOTE: 99 by default.
  24. -k Signal number to send via kill.
  25. NOTE: 9 by default.
  26. -t Timeout in seconds before alarming.
  27. NOTE: 60 by default.
  28. __END__
  29. print $message;
  30. exit 1;
  31. };
  32. my $pid;
  33. local $SIG{ALRM} = sub { kill $opt_killcode, $pid or die "Kill failed: $!";
  34. die "Timeout!\n"};
  35. eval{
  36. my $x = defined($pid = fork());
  37. unless ($pid){
  38. print qx(@ARGV);
  39. die "Exec of ", join(' ', @ARGV), " failed at $!\n";
  40. };
  41. alarm $opt_timeout;
  42. waitpid $pid => 0;
  43. alarm 0;
  44. exit 0;
  45. };
  46. if ($@){
  47. die "Nothing to do!\n" unless $@ eq "Timeout!\n";
  48. exit $opt_exitcode;
  49. }else{
  50. exit 0;
  51. };