Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/sun/jvmstat/testlibrary/utils.sh
41149 views
1
#
2
# Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved.
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
#
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.
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
43
Windows_* | CYGWIN*)
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
57
Windows_95 | Windows_98 | Windows_ME | CYGWIN* )
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
}
192
193
# check to see if a port is free
194
checkPort() # port
195
{
196
inuse=`netstat -a | egrep "\.$1"`
197
if [ "${inuse}" = "" ] ; then
198
echo "free"
199
else
200
echo "inuse"
201
fi
202
}
203
204
# Get a free port, where port+1 is also free, return 0 when giving up
205
freePort()
206
{
207
start=3000
208
while [ ${start} -lt 3030 ] ; do
209
port1=`expr ${start} '+' $$ '%' 1000`
210
port2=`expr ${port1} '+' 1`
211
if [ "`checkPort ${port1}`" = "inuse" \
212
-o "`checkPort ${port2}`" = "inuse" ] ; then
213
start=`expr ${start} '+' 1`
214
else
215
break
216
fi
217
done
218
if [ "`checkPort ${port1}`" = "inuse" \
219
-o "`checkPort ${port2}`" = "inuse" ] ; then
220
port1="0"
221
fi
222
echo "${port1}"
223
}
224
225
# Flags used by all jstat calls in jdk/sun/tools/jstat/*.sh
226
#
227
# The awk scripts parsing jstat output expect it to be in en-us locale.
228
# Especially, we must force '.' instead of ',' in numbers.
229
COMMON_JSTAT_FLAGS="-J-XX:+UsePerfData -J-Duser.language=en -J-Duser.country=en"
230
231
232