author | duke |
Wed, 05 Jul 2017 17:14:19 +0200 | |
changeset 5570 | bfed772dd989 |
parent 5506 | 202f599c92aa |
child 5813 | 8e455cd3e807 |
permissions | -rw-r--r-- |
2 | 1 |
# |
5506 | 2 |
# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. |
2 | 3 |
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
# |
|
5 |
# This code is free software; you can redistribute it and/or modify it |
|
6 |
# under the terms of the GNU General Public License version 2 only, as |
|
7 |
# published by the Free Software Foundation. |
|
8 |
# |
|
9 |
# This code is distributed in the hope that it will be useful, but WITHOUT |
|
10 |
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
11 |
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
12 |
# version 2 for more details (a copy is included in the LICENSE file that |
|
13 |
# accompanied this code). |
|
14 |
# |
|
15 |
# You should have received a copy of the GNU General Public License version |
|
16 |
# 2 along with this work; if not, write to the Free Software Foundation, |
|
17 |
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
18 |
# |
|
5506 | 19 |
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
20 |
# or visit www.oracle.com if you need additional information or have any |
|
21 |
# questions. |
|
2 | 22 |
# |
23 |
||
24 |
# |
|
25 |
||
26 |
setup() { |
|
27 |
# Verify directory context variables are set |
|
28 |
if [ "${TESTJAVA}" = "" ] ; then |
|
29 |
echo "TESTJAVA not set. Test cannot execute. Failed." |
|
30 |
exit 1 |
|
31 |
fi |
|
32 |
||
33 |
if [ "${TESTCLASSES}" = "" ] ; then |
|
34 |
TESTCLASSES="." |
|
35 |
fi |
|
36 |
||
37 |
if [ "${TESTSRC}" = "" ] ; then |
|
38 |
TESTSRC="." |
|
39 |
fi |
|
40 |
||
41 |
OS=`uname -s` |
|
42 |
case ${OS} in |
|
4663
dfea6ffdb0dc
6911104: Tests do not work with CYGWIN: tools, sun/tools, and com/sun/tools
ohair
parents:
2
diff
changeset
|
43 |
Windows_* | CYGWIN*) |
2 | 44 |
PS=";" |
45 |
FS="\\" |
|
46 |
;; |
|
47 |
*) |
|
48 |
PS=":" |
|
49 |
FS="/" |
|
50 |
;; |
|
51 |
esac |
|
52 |
} |
|
53 |
||
54 |
verify_os() { |
|
55 |
OS=`uname -s` |
|
56 |
case ${OS} in |
|
4663
dfea6ffdb0dc
6911104: Tests do not work with CYGWIN: tools, sun/tools, and com/sun/tools
ohair
parents:
2
diff
changeset
|
57 |
Windows_95 | Windows_98 | Windows_ME | CYGWIN* ) |
2 | 58 |
echo "Test bypassed: jvmstat feature not supported on ${OS}" |
59 |
exit 0 |
|
60 |
;; |
|
61 |
Windows_*) |
|
62 |
# verify that the tmp directory supports persistent ACLs, which |
|
63 |
# are required for jvmstat to enable its shared memory feature. |
|
64 |
# NOTE: FAT type files systems do not support ACLs, but NTFS files |
|
65 |
# systems do. |
|
66 |
# |
|
67 |
echo "temp directory is in: `windir -t`" |
|
68 |
TMPDRIVE=`windir -t | cut -d: -f1` |
|
69 |
if [ "${TMPDRIVE}" = "" ] ; then |
|
70 |
echo "Could not get temp directory drive letter" |
|
71 |
exit 1 |
|
72 |
fi |
|
73 |
||
74 |
echo "temp file system characteristics:" |
|
75 |
sysinf drives -a | grep "^${TMPDRIVE}" |
|
76 |
sysinf drives -a | grep "^${TMPDRIVE}" | grep PERSISTENT_ACLS > /dev/null |
|
77 |
case $? in |
|
78 |
0) |
|
79 |
;; |
|
80 |
1) |
|
81 |
echo "Test bypassed: jvmstat feature disabled because the temp" |
|
82 |
echo "directory doesn't support persistent ACLs" |
|
83 |
exit 0 |
|
84 |
;; |
|
85 |
2) |
|
86 |
echo "Could not get temp directory file system features" |
|
87 |
exit 1 |
|
88 |
;; |
|
89 |
*) |
|
90 |
echo "Unexpected return code from grep - $?" |
|
91 |
exit 1 |
|
92 |
;; |
|
93 |
esac |
|
94 |
;; |
|
95 |
esac |
|
96 |
} |
|
97 |
||
98 |
# function to kill the process with the given process id |
|
99 |
kill_proc() { |
|
100 |
kill_pid=$1 |
|
101 |
||
102 |
if [ "${kill_pid}" = "" ] |
|
103 |
then |
|
104 |
echo "kill_proc(): null pid: ignored" |
|
105 |
return |
|
106 |
fi |
|
107 |
||
108 |
if [ ${kill_pid} -le 0 ] |
|
109 |
then |
|
110 |
echo "kill_proc(): invalid pid: ${kill_pid}: ignored" |
|
111 |
return |
|
112 |
fi |
|
113 |
||
114 |
OS=`uname -s` |
|
115 |
case $OS in |
|
116 |
Windows_*) |
|
117 |
case ${SHELL_VERSION} in |
|
118 |
[1234567].* | 8.[12345].*) |
|
119 |
# when starting processes in the background, mks creates an |
|
120 |
# intervening between the parent process and the background |
|
121 |
# process. The pid acquired for background process as acquired |
|
122 |
# by the $! shell variable is actually the pid of the invervening |
|
123 |
# shell and not that of the background process. Sending a specific |
|
124 |
# signal to the intervening shell will only effects the intervening |
|
125 |
# shell and not the background process, thus leaving the background |
|
126 |
# process running. The following code assumes that the pid passed |
|
127 |
# into this function as ${kill_pid}, was acquired by $!. Therefore, |
|
128 |
# in order to kill the background process, we must first find the |
|
129 |
# children of ${kill_pid} (should be only one child) and kill them. |
|
130 |
||
131 |
ps -o pid,ppid | grep "${kill_pid}$" |
|
132 |
children=`mks_children ${kill_pid}` |
|
133 |
echo "killing children of ${kill_pid}: ${children}" |
|
134 |
for child in ${children} ; do |
|
135 |
kill_proc_common ${child} |
|
136 |
done |
|
137 |
;; |
|
138 |
*) |
|
139 |
# in mks 8.6 and later, the pid returned in $! is now the pid |
|
140 |
# of the background process and not that of the intervening shell. |
|
141 |
kill_proc_common ${kill_pid} |
|
142 |
;; |
|
143 |
esac |
|
144 |
;; |
|
145 |
*) |
|
146 |
kill_proc_common ${kill_pid} |
|
147 |
;; |
|
148 |
esac |
|
149 |
} |
|
150 |
||
151 |
mks_children() { |
|
152 |
ppid=$1 |
|
153 |
ps -o pid,ppid | grep "${ppid}$" | awk ' |
|
154 |
BEGIN { pids="" } |
|
155 |
{ pids = pids $1 " " } |
|
156 |
END { print pids }' |
|
157 |
} |
|
158 |
||
159 |
kill_proc_common() { |
|
160 |
kpid=$1 |
|
161 |
||
162 |
# verify that the process exists and we can signal it |
|
163 |
kill -0 ${kpid} 2>/dev/null |
|
164 |
if [ $? -ne 0 ] |
|
165 |
then |
|
166 |
echo "Could not signal >${kpid}<" |
|
167 |
echo "user id = `id`" |
|
168 |
echo "process information :" |
|
169 |
ps -l -p ${kpid} |
|
170 |
return |
|
171 |
fi |
|
172 |
||
173 |
kill -TERM ${kpid} # hit it easy first |
|
174 |
if [ $? -eq 0 ] |
|
175 |
then |
|
176 |
sleep 2 |
|
177 |
kill -0 ${kpid} 2>/dev/null |
|
178 |
# check if it's still hanging around |
|
179 |
if [ $? -eq 0 ] |
|
180 |
then |
|
181 |
# it's still lingering, now it it hard |
|
182 |
kill -KILL ${kpid} 2>/dev/null |
|
183 |
if [ $? -ne 0 ] |
|
184 |
then |
|
185 |
echo "Could not kill ${kpid}!" |
|
186 |
fi |
|
187 |
fi |
|
188 |
else |
|
189 |
echo "Error sending term signal to ${kpid}!" |
|
190 |
fi |
|
191 |
} |