~stewart/drizzle/embedded-innodb-create-select-transaction-arrgh

« back to all changes in this revision

Viewing changes to scripts/mysql_zap.sh

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

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