home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / mysql / scripts / mysql_zap < prev    next >
Text File  |  2008-04-17  |  4KB  |  172 lines

  1. #!@PERL@
  2. # Copyright (C) 2000-2002, 2004 MySQL AB
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; version 2 of the License.
  6. # This program is distributed in the hope that it will be useful,
  7. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9. # GNU General Public License for more details.
  10. # You should have received a copy of the GNU General Public License
  11. # along with this program; if not, write to the Free Software
  12. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  13.  
  14. # This is a utility for MySQL. It is not needed by any standard part
  15. # of MySQL.
  16.  
  17. # Usage: mysql_zap [-signal] [-f] [-t] pattern
  18.  
  19. # Configuration parameters.
  20.  
  21. $sig = "";            # Default to try all signals
  22. $ans = "y";
  23. $opt_f= 0;
  24. $opt_t= 0;
  25. $opt_a = "";
  26.  
  27. $BSD = -f '/vmunix' || $ENV{"OS"} eq "SunOS4" || $^O eq 'darwin';
  28. $LINUX = $^O eq 'linux';
  29. $pscmd = $BSD ? "/bin/ps -auxww" : $LINUX ? "/bin/ps axuw" : "/bin/ps -ef";
  30.  
  31. open(TTYIN, "</dev/tty") || die "can't read /dev/tty: $!";
  32. open(TTYOUT, ">/dev/tty") || die "can't write /dev/tty: $!";
  33. select(TTYOUT);
  34. $| = 1;
  35. select(STDOUT);
  36. $SIG{'INT'} = 'cleanup';
  37.  
  38. while ($#ARGV >= $[ && $ARGV[0] =~ /^-/) {
  39.     if ($ARGV[0] =~ /(ZERO|HUP|INT|QUIT|ILL|TRAP|ABRT|EMT|FPE|KILL|BUS|SEGV|SYS|PIPE|ALRM|TERM|URG|STOP|TSTP|CONT|CLD|TTIN|TTOU|IO|XCPU|XFSZ|VTALRM|PROF|WINCH|LOST|USR1|USR2)/ || $ARGV[0] =~ /-(\d+)$/) {
  40.     $sig = $1;
  41.     } elsif ($ARGV[0] eq "-f") {
  42.     $opt_f=1;
  43.     } elsif ($ARGV[0] eq "-t") {
  44.     $opt_t=1;
  45.     $ans = "n";
  46.     }
  47.     elsif ($ARGV[0] eq "-a")
  48.     {
  49.     $opt_a = 1;
  50.     }
  51.     elsif ($ARGV[0] eq "-?" || $ARGV[0] eq "-I" || $ARGV[0] eq "--help")
  52.     {
  53.     &usage;
  54.     }
  55.     else {
  56.     print STDERR "$0: illegal argument $ARGV[0] ignored\n";
  57.     }
  58.     shift;
  59. }
  60.  
  61. &usage if $#ARGV < 0;
  62.  
  63. if (!$opt_f)
  64. {
  65.     if ($BSD) {
  66.     system "stty cbreak </dev/tty >/dev/tty 2>&1";
  67.     }
  68.     else {
  69.     system "stty", 'cbreak',
  70.     system "stty", 'eol', '^A';
  71.     }
  72. }
  73.  
  74. open(PS, "$pscmd|") || die "can't run $pscmd: $!";
  75. $title = <PS>;
  76. print TTYOUT $title;
  77.  
  78. # Catch any errors with eval.  A bad pattern, for instance.
  79. eval <<'EOF';
  80. process: while ($cand = <PS>)
  81. {
  82.     chop($cand);
  83.     ($user, $pid) = split(' ', $cand);
  84.     next if $pid == $$;
  85.     $found = !@ARGV;
  86.     if ($opt_a) { $found = 1; }
  87.     foreach $pat (@ARGV)
  88.     {
  89.     if ($opt_a)
  90.     {
  91.         if (! ($cand =~ $pat))
  92.         {
  93.         next process;
  94.         }
  95.     }
  96.     else
  97.     {
  98.         $found = 1 if $cand =~ $pat;
  99.     }
  100.     }
  101.     next if (!$found);
  102.     if (! $opt_f && ! $opt_t)
  103.     {
  104.     print TTYOUT "$cand? ";
  105.     read(TTYIN, $ans, 1);
  106.     print TTYOUT "\n" if ($ans ne "\n");
  107.     }
  108.     else
  109.     {
  110.     print TTYOUT "$cand\n";
  111.     }
  112.     if ($ans =~ /^y/i) { &killpid($sig, $pid); }
  113.     if ($ans =~ /^q/i) { last; }
  114. }
  115. EOF
  116.  
  117. &cleanup;
  118.  
  119.  
  120. sub usage {
  121.     print <<EOF;
  122. Usage:   $0 [-signal] [-?Ift] [--help] pattern
  123. Options: -I or -? "info"  -f "force" -t "test".
  124.  
  125. Version 1.0
  126. Kill processes that match the pattern.
  127. If -f isn't given, ask user for confirmation for each process to kill.
  128. If signal isn't given, try first with signal 15, then with signal 9.
  129. If -t is given, the processes are only shown on stdout.
  130. EOF
  131.     exit(1);
  132. }
  133.  
  134. sub cleanup {
  135.     if ($BSD) {
  136.     system "stty -cbreak </dev/tty >/dev/tty 2>&1";
  137.     }
  138.     else {
  139.     system "stty", 'icanon';
  140.     system "stty", 'eol', '^@';
  141.     }
  142.     print "\n";
  143.     exit;
  144. }
  145.  
  146. sub killpid {
  147.     local($signal,$pid) = @_;
  148.     if ($signal)
  149.     {
  150.     kill $signal,$pid;
  151.     }
  152.     else
  153.     {
  154.     print "kill -15\n";
  155.     kill 15, $pid;
  156.     for (1..5) {
  157.         sleep 2;
  158.         return if kill(0, $pid) == 0;
  159.     }
  160.     print "kill -9\n";
  161.     kill 9, $pid;
  162.     for (1..5) {
  163.         sleep 2;
  164.         return if kill(0, $pid) == 0;
  165.     }
  166.     print "$pid will not die!\n";
  167.     }
  168. }
  169.