- moved here from sysv/
[util-vserver.git] / scripts / vkill.subst
1 #!/usr/bin/perl -w
2
3 # Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
4 # based on vkill by Philip Snyder
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2, or (at your option)
9 # any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
20 # kill wrapper for vserver. 
21 # Philip Snyder <psnyder@vizional.com>
22 # 2002/02/06 19:00 PST
23
24
25 $PROC = $ARGV[0];
26
27 # Grab the output from a context query against this process id
28 open(PH, "@SBINDIR@/chcontext --silent --ctx 1 cat /proc/$PROC/status 2>&1 |");
29
30 # Loop through the output
31 while (<PH>) {
32
33   # Searching for a line that looks like this:
34   # s_context: #
35   if (/^s_context: ([0-9]+)/) {
36
37     print "Process id $PROC was found in security context $1.\n";
38
39     # Make sure the process is in a vserver context
40     if ($1 > 0) {
41
42       # Since we have the context and the process id, we can kill it
43       print " + Killing... ";
44       `@SBINDIR@/chcontext --ctx $1 kill $PROC`;
45       print "[done]\n";
46
47     } else {
48
49       # Not in vserver context, so its a process on the actual server
50       print " + Killing... ";
51       `kill $PROC`;
52       print "[done]\n";
53
54     }
55     exit;
56   }
57 }
58
59 print "Process id $PROC not found.\n";
60 exit