Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/lang/Runtime/exec/ExitValue.java
47209 views
1
/*
2
* Copyright (c) 2002, 2007, 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
* @test
26
* @bug 4680945 4873419
27
* @summary Check process exit code
28
* @author kladko, Martin Buchholz
29
*/
30
31
import java.io.File;
32
33
public class ExitValue
34
{
35
36
public static String join(String separator, String[] elts) {
37
String result = elts[0];
38
for (int i = 1; i < elts.length; ++i)
39
result = result + separator + elts[i];
40
return result;
41
}
42
43
public static void checkExitValue(String[] commandArgs,
44
int expectedExitValue)
45
throws Exception
46
{
47
if (! (new File(commandArgs[0]).exists()))
48
return;
49
50
System.out.println("Running command: " + join(" ", commandArgs));
51
Process proc = Runtime.getRuntime().exec(commandArgs);
52
int val;
53
byte[] buf = new byte[4096];
54
int n = proc.getErrorStream().read(buf);
55
if (n > 0)
56
throw new Exception
57
("Unexpected stderr: "
58
+ new String(buf, 0, n, "ASCII"));
59
if ((val = proc.waitFor()) != expectedExitValue)
60
throw new Exception
61
("waitFor() returned unexpected value " + val);
62
if ((val = proc.exitValue()) != expectedExitValue)
63
throw new Exception
64
("exitValue() returned unexpected value " + val);
65
}
66
67
public static void checkPosixShellExitValue(String posixShellProgram,
68
int expectedExitValue)
69
throws Exception
70
{
71
checkExitValue(new String[] { "/bin/sh", "-c", posixShellProgram },
72
expectedExitValue);
73
}
74
75
final static int EXIT_CODE = 5;
76
77
public static void main(String[] args) throws Exception {
78
79
String java = join(File.separator, new String []
80
{ System.getProperty("java.home"), "bin", "java" });
81
82
checkExitValue(new String[]
83
{ java,
84
"-classpath", System.getProperty("test.classes", "."),
85
"ExitValue$Run", String.valueOf(EXIT_CODE)
86
}, EXIT_CODE);
87
88
checkExitValue(new String[] { "/bin/true" }, 0);
89
90
checkPosixShellExitValue("exit", 0);
91
92
checkPosixShellExitValue("exit 7", 7);
93
94
if (new File("/bin/kill").exists()) {
95
int sigoffset =
96
System.getProperty("os.name").equals("SunOS") ? 0 : 128;
97
checkPosixShellExitValue("/bin/kill -9 $$", sigoffset+9);
98
}
99
}
100
101
public static class Run {
102
public static void main (String[] argv) {
103
System.exit(Integer.parseInt(argv[0]));
104
}
105
}
106
}
107
108