下面列出了java.lang.InterruptedException#java.lang.Process 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public static ArrayList<String> nativeGetConnectedIP(String deviceName) {
ArrayList<String> connectedIP = new ArrayList<String>();
try {
Process local=Runtime.getRuntime().exec("cat /proc/net/arp");
DataInputStream os=new DataInputStream(local.getInputStream());
String line;
Log.i(TAG,"arp begin");
while ((line = os.readLine()) != null) {
Log.i(TAG, line);
String[] splited = line.split("\\s+");
if (splited != null && splited.length > 5) {
if(!splited[3].equals("00:00:00:00:00:00")&&splited[5].contains(deviceName)){
String ip = splited[0];
connectedIP.add(ip);
}
}
}
Log.i(TAG,"arp end");
} catch (IOException e) {
e.printStackTrace();
}
// connectedIP.remove(0);
return connectedIP;
}
final
public static Map<String,String> mapEnvInfo(String filter) throws IOException {
Process proc = Runtime.getRuntime().exec("env");
Map<String, String> ret = new HashMap<>();
try (InputStream stream = proc.getInputStream()) {
try (Scanner s = new Scanner(stream).useDelimiter("\\n")) {
while (s.hasNext())
{
String val = s.next();
String[] nameVal = val.split("=");
if (filter.equalsIgnoreCase("*"))
ret.put(nameVal[0],nameVal.length > 1 ? nameVal[1] : "");
else
{
if (nameVal[0].startsWith(filter))
{
ret.put(nameVal[0],nameVal.length > 1 ? nameVal[1] : "");
}
}
}
}
}
return ret;
}
public static void initialize(String carName, String size, int numThreads, boolean useBeans) {
try {
car = carName;
/* Calling this function directly does not launch the client now. According to testing, it seems the getMain method of boot does not work properlly.
Thus these ugly codes are temporarily used fot verifing that the whole framework works
Will be changed once the problem is fixed
*/
//ClientCLI.main(new String[] { car, "-i", "-t", numThreads + "", "-s", size, useBeans ? "-b" : "" });
gero = System.getProperty("org.apache.geronimo.home.dir");
String jhome= System.getProperty("java.home");
ProcessBuilder pb = new ProcessBuilder(jhome + "/bin/java", "-jar", "-Dkaraf.startLocalConsole=false",gero + "/bin/client.jar", car, "-i", "-t", numThreads + "", "-s", size, useBeans ? "-b" : "");
Process p = pb.start();
p.waitFor();
} catch (Exception e) {
System.err.print("Exception initializing client: " + e.toString());
e.printStackTrace();
System.exit(-1);
}
}
public List<String> allProcesses() {
List<String> processes = new LinkedList<String>();
try {
String line;
Process p = null;
if(System.getProperty("os.name").toLowerCase().contains("win")) {
p = Runtime.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tasklist.exe");
} else {
p = Runtime.getRuntime().exec("ps -e");
}
BufferedReader input =
new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
processes.add(line);
}
input.close();
} catch (Exception err) {
err.printStackTrace();
}
return processes;
}
/**
* Runs MXBeanWeirdParamTest$ClientSide with the passed options and redirects
* subprocess standard I/O to the current (parent) process. This provides a
* trace of what happens in the subprocess while it is runnning (and before
* it terminates).
*
* @param serviceUrlStr string representing the JMX service Url to connect to.
*/
private int runClientSide(String serviceUrlStr) throws Exception {
// Building command-line
List<String> opts = buildCommandLine();
opts.add(serviceUrlStr);
// Launch separate JVM subprocess
int exitCode = 0;
String[] optsArray = opts.toArray(new String[0]);
ProcessBuilder pb = new ProcessBuilder(optsArray);
Process p = ProcessTools.startProcess("MXBeanWeirdParamTest$ClientSide", pb);
// Handling end of subprocess
try {
exitCode = p.waitFor();
if (exitCode != 0) {
System.out.println(
"Subprocess unexpected exit value of [" + exitCode +
"]. Expected 0.\n");
}
} catch (InterruptedException e) {
System.out.println("Parent process interrupted with exception : \n " + e + " :" );
// Parent thread unknown state, killing subprocess.
p.destroyForcibly();
throw new RuntimeException(
"Parent process interrupted with exception : \n " + e + " :" );
} finally {
return exitCode;
}
}
/**
* Runs MXBeanWeirdParamTest$ClientSide with the passed options and redirects
* subprocess standard I/O to the current (parent) process. This provides a
* trace of what happens in the subprocess while it is runnning (and before
* it terminates).
*
* @param serviceUrlStr string representing the JMX service Url to connect to.
*/
private int runClientSide(String serviceUrlStr) throws Exception {
// Building command-line
List<String> opts = buildCommandLine();
opts.add(serviceUrlStr);
// Launch separate JVM subprocess
int exitCode = 0;
String[] optsArray = opts.toArray(new String[0]);
ProcessBuilder pb = new ProcessBuilder(optsArray);
Process p = ProcessTools.startProcess("MXBeanWeirdParamTest$ClientSide", pb);
// Handling end of subprocess
try {
exitCode = p.waitFor();
if (exitCode != 0) {
System.out.println(
"Subprocess unexpected exit value of [" + exitCode +
"]. Expected 0.\n");
}
} catch (InterruptedException e) {
System.out.println("Parent process interrupted with exception : \n " + e + " :" );
// Parent thread unknown state, killing subprocess.
p.destroyForcibly();
throw new RuntimeException(
"Parent process interrupted with exception : \n " + e + " :" );
} finally {
return exitCode;
}
}
/**
* Runs MXBeanWeirdParamTest$ClientSide with the passed options and redirects
* subprocess standard I/O to the current (parent) process. This provides a
* trace of what happens in the subprocess while it is runnning (and before
* it terminates).
*
* @param serviceUrlStr string representing the JMX service Url to connect to.
*/
private int runClientSide(String serviceUrlStr) throws Exception {
// Building command-line
List<String> opts = buildCommandLine();
opts.add(serviceUrlStr);
// Launch separate JVM subprocess
int exitCode = 0;
String[] optsArray = opts.toArray(new String[0]);
ProcessBuilder pb = new ProcessBuilder(optsArray);
Process p = ProcessTools.startProcess("MXBeanWeirdParamTest$ClientSide", pb);
// Handling end of subprocess
try {
exitCode = p.waitFor();
if (exitCode != 0) {
System.out.println(
"Subprocess unexpected exit value of [" + exitCode +
"]. Expected 0.\n");
}
} catch (InterruptedException e) {
System.out.println("Parent process interrupted with exception : \n " + e + " :" );
// Parent thread unknown state, killing subprocess.
p.destroyForcibly();
throw new RuntimeException(
"Parent process interrupted with exception : \n " + e + " :" );
} finally {
return exitCode;
}
}
/**
* Runs MXBeanWeirdParamTest$ClientSide with the passed options and redirects
* subprocess standard I/O to the current (parent) process. This provides a
* trace of what happens in the subprocess while it is runnning (and before
* it terminates).
*
* @param serviceUrlStr string representing the JMX service Url to connect to.
*/
private int runClientSide(String serviceUrlStr) throws Exception {
// Building command-line
List<String> opts = buildCommandLine();
opts.add(serviceUrlStr);
// Launch separate JVM subprocess
int exitCode = 0;
String[] optsArray = opts.toArray(new String[0]);
ProcessBuilder pb = new ProcessBuilder(optsArray);
Process p = ProcessTools.startProcess("MXBeanWeirdParamTest$ClientSide", pb);
// Handling end of subprocess
try {
exitCode = p.waitFor();
if (exitCode != 0) {
System.out.println(
"Subprocess unexpected exit value of [" + exitCode +
"]. Expected 0.\n");
}
} catch (InterruptedException e) {
System.out.println("Parent process interrupted with exception : \n " + e + " :" );
// Parent thread unknown state, killing subprocess.
p.destroyForcibly();
throw new RuntimeException(
"Parent process interrupted with exception : \n " + e + " :" );
} finally {
return exitCode;
}
}
/**
* Runs MXBeanWeirdParamTest$ClientSide with the passed options and redirects
* subprocess standard I/O to the current (parent) process. This provides a
* trace of what happens in the subprocess while it is runnning (and before
* it terminates).
*
* @param serviceUrlStr string representing the JMX service Url to connect to.
*/
private int runClientSide(String serviceUrlStr) throws Exception {
// Building command-line
List<String> opts = buildCommandLine();
opts.add(serviceUrlStr);
// Launch separate JVM subprocess
int exitCode = 0;
String[] optsArray = opts.toArray(new String[0]);
ProcessBuilder pb = new ProcessBuilder(optsArray);
Process p = ProcessTools.startProcess("MXBeanWeirdParamTest$ClientSide", pb);
// Handling end of subprocess
try {
exitCode = p.waitFor();
if (exitCode != 0) {
System.out.println(
"Subprocess unexpected exit value of [" + exitCode +
"]. Expected 0.\n");
}
} catch (InterruptedException e) {
System.out.println("Parent process interrupted with exception : \n " + e + " :" );
// Parent thread unknown state, killing subprocess.
p.destroyForcibly();
throw new RuntimeException(
"Parent process interrupted with exception : \n " + e + " :" );
} finally {
return exitCode;
}
}
public static String execReadToString(String execCommand) throws IOException {
Process proc = Runtime.getRuntime().exec(execCommand);
try (InputStream stream = proc.getInputStream()) {
try (Scanner s = new Scanner(stream).useDelimiter("\\A")) {
return s.hasNext() ? s.next() : "";
}
}
}
public static void runIteration(String size, int numThreads, boolean useBeans) {
try {
/* Calling the function directly does not launch the client now. According to testing, it seems the getMain method of boot does not work properlly.
Thus these ugly codes are temporarily used for checking the whole framework
Will be changed once the problem is fixed
*/
//ClientCLI.main(new String[] { car, "-i", "-t", numThreads + "", "-s", size, useBeans ? "-b" : "" });
String jhome= System.getProperty("java.home");
ProcessBuilder pb = new ProcessBuilder(jhome + "/bin/java", "-jar", "-Dkaraf.startLocalConsole=false", gero + "/bin/client.jar", car, "-t", numThreads + "", "-s", size, useBeans ? "-b" : "");
Process p = pb.start();
p.waitFor();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
while (stdInput.ready()) { //While there's something in the buffer
//read&print - replace with a buffered read (into an array) if the output doesn't contain CR/LF
System.out.println(stdInput.readLine());
}
} catch (Exception e) {
System.err.print("Exception running client iteration: " + e.toString());
e.printStackTrace();
}
}
/**
* Runs MXBeanWeirdParamTest$ClientSide with the passed options and redirects
* subprocess standard I/O to the current (parent) process. This provides a
* trace of what happens in the subprocess while it is runnning (and before
* it terminates).
*
* @param serviceUrlStr string representing the JMX service Url to connect to.
*/
private int runClientSide(String serviceUrlStr) throws Exception {
// Building command-line
List<String> opts = buildCommandLine();
opts.add(serviceUrlStr);
// Launch separate JVM subprocess
int exitCode = 0;
String[] optsArray = opts.toArray(new String[0]);
ProcessBuilder pb = new ProcessBuilder(optsArray);
Process p = ProcessTools.startProcess("MXBeanWeirdParamTest$ClientSide", pb);
// Handling end of subprocess
try {
exitCode = p.waitFor();
if (exitCode != 0) {
System.out.println(
"Subprocess unexpected exit value of [" + exitCode +
"]. Expected 0.\n");
}
} catch (InterruptedException e) {
System.out.println("Parent process interrupted with exception : \n " + e + " :" );
// Parent thread unknown state, killing subprocess.
p.destroyForcibly();
throw new RuntimeException(
"Parent process interrupted with exception : \n " + e + " :" );
} finally {
return exitCode;
}
}
public void runRepairnator(EnvVars env) throws IOException,InterruptedException{
Config config = this.config;
System.out.println("jar location " + config.getJarLocation());
RepairnatorProcessBuilder repProcBuilder = new RepairnatorProcessBuilder()
.useJavaExec(config.getJavaExec())
.atJarLocation(config.getJarLocation())
.onGitUrl(config.getGitUrl())
.onGitBranch(config.getGitBranch())
.onGitOAuth(config.getGitOAuth())
.withSmtpUsername(config.getSmtpUsername())
.withSmtpPassword(config.getSmtpPassword())
.withSmtpServer(config.getSmtpServer())
.withSmtpPort(config.getSmtpPort())
.shouldNotifyTo(config.getNotifyTo())
.withRepairTools(config.getTools())
.withSonarRules(config.getSonarRules())
.useSmtpTls(config.useTLSOrSSL())
.asNoTravisRepair()
.alsoCreatePR()
.withMavenHome(config.getMavenHome())
.atWorkSpace(config.getTempDir().getAbsolutePath())
.withOutputDir(config.getTempDir().getAbsolutePath());
ProcessBuilder builder = repProcBuilder.build().directory(config.getTempDir());
builder.redirectErrorStream(true);
builder.inheritIO().redirectOutput(ProcessBuilder.Redirect.PIPE);
Process process = builder.start();
this.printProcessOutPut(process);
process.waitFor();
}
/**
* Runs MXBeanWeirdParamTest$ClientSide with the passed options and redirects
* subprocess standard I/O to the current (parent) process. This provides a
* trace of what happens in the subprocess while it is runnning (and before
* it terminates).
*
* @param serviceUrlStr string representing the JMX service Url to connect to.
*/
private int runClientSide(String serviceUrlStr) throws Exception {
// Building command-line
List<String> opts = buildCommandLine();
opts.add(serviceUrlStr);
// Launch separate JVM subprocess
int exitCode = 0;
String[] optsArray = opts.toArray(new String[0]);
ProcessBuilder pb = new ProcessBuilder(optsArray);
Process p = ProcessTools.startProcess("MXBeanWeirdParamTest$ClientSide", pb);
// Handling end of subprocess
try {
exitCode = p.waitFor();
if (exitCode != 0) {
System.out.println(
"Subprocess unexpected exit value of [" + exitCode +
"]. Expected 0.\n");
}
} catch (InterruptedException e) {
System.out.println("Parent process interrupted with exception : \n " + e + " :" );
// Parent thread unknown state, killing subprocess.
p.destroyForcibly();
throw new RuntimeException(
"Parent process interrupted with exception : \n " + e + " :" );
} finally {
return exitCode;
}
}
private static void runtool(jvm jvm, String loc, String[] args)
throws IOException
{
System.out.println(concatenate(args) + ':');
if (jvm == null) {
com.pivotal.gemfirexd.internal.iapi.tools.run.main(args);
return;
}
Vector cmd = jvm.getCommandLine();
cmd.addElement("-jar");
cmd.addElement(loc);
for (int i=0; i < args.length; i++) {
cmd.addElement(args[i]);
}
String command = concatenate((String[]) cmd.toArray(new String[0]));
Process pr = null;
try
{
pr = Runtime.getRuntime().exec(command);
BackgroundStreamSaver saver =
new BackgroundStreamSaver(pr.getInputStream(), System.out);
saver.finish();
pr.waitFor();
pr.destroy();
} catch(Throwable t) {
System.out.println("Process exception: " + t.getMessage());
if (pr != null)
{
pr.destroy();
pr = null;
}
}
}
/**
* Utility for taking a main class, executing it as a process,
* and returning a scanner of that process stdout.
* Callers takes ownership of returned Scanner and should close() the scanner when done.
*/
public static Scanner getCommandOutput(Class<?> childMain, String[] args) {
OutputScanner outputScanner = new OutputScanner();
OutputStream outputStream = outputScanner.getOutputStream();
Scanner scan = outputScanner.getScanner();
scan.useDelimiter(System.getProperty("line.separator"));
try {
Process p = spawnChildProcess(childMain, args, null, outputStream, null);
waitForAndDestroy(p);
} catch (IOException e) { e.printStackTrace(); }
return scan;
}
/**
* Spawn a child to execute the main method in Class childMain
* using the same args and environment as the current runtime.
* This method prevents a child processes from hanging
* when its output buffers saturate by creating threads to
* empty the output buffers.
* @return The process, already started. Consider using waitForAndDestroy() to clean up afterwards.
* @param childMain The Class to spawn, must contain main function
* @param inputArgs arguments for the main class. Use null to pass no arguments.
* @param in The child process will read input from this stream. Use null to avoid reading input. Always close() your stream when you are done or you may deadlock.
* @param out The child process will write output to this stream. Use null to avoid writing output.
* @param err The child process will write errors to this stream. Use null to avoid writing output.
*/
public static Process spawnChildProcess(
Class<?> childMain, String[] inputArgs, InputStream in, OutputStream out, OutputStream err)
throws IOException {
//get the same arguments as used to start this JRE
RuntimeMXBean rmxb = ManagementFactory.getRuntimeMXBean();
List<String> arglist = rmxb.getInputArguments();
String cp = rmxb.getClassPath();
//construct "java <arguments> <main-class-name>"
ArrayList<String> arguments = new ArrayList<String>(arglist);
arguments.add(0, "java");
arguments.add("-classpath");
arguments.add(cp);
arguments.add(childMain.getCanonicalName());
for (String arg : inputArgs) arguments.add(arg);
//using ProcessBuilder initializes the child process with parent's env.
ProcessBuilder pb = new ProcessBuilder(arguments);
//redirecting STDERR to STDOUT needs to be done before starting
if (err == out) {
pb.redirectErrorStream(true);
}
Process proc;
proc = pb.start(); //Might throw an IOException to calling method
//setup stdin
if (in != null) {
new OutputReader(in, proc.getOutputStream()).start();
}
//setup stdout
if (out == null) {
out = new NullOutputStream();
}
new OutputReader(proc.getInputStream(), out).start();
//setup stderr
if (!pb.redirectErrorStream()) {
if (err == null) {
err = new NullOutputStream();
}
new OutputReader(proc.getErrorStream(), err).start();
}
return proc;
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
private static void runtool(jvm jvm, String loc, String[] args)
throws IOException
{
System.out.println(concatenate(args) + ':');
if (jvm == null) {
com.pivotal.gemfirexd.internal.iapi.tools.run.main(args);
return;
}
Vector cmd = jvm.getCommandLine();
cmd.addElement("-jar");
cmd.addElement(loc);
for (int i=0; i < args.length; i++) {
cmd.addElement(args[i]);
}
String command = concatenate((String[]) cmd.toArray(new String[0]));
Process pr = null;
try
{
pr = Runtime.getRuntime().exec(command);
BackgroundStreamSaver saver =
new BackgroundStreamSaver(pr.getInputStream(), System.out);
saver.finish();
pr.waitFor();
pr.destroy();
} catch(Throwable t) {
System.out.println("Process exception: " + t.getMessage());
if (pr != null)
{
pr.destroy();
pr = null;
}
}
}
public void printProcessOutPut(Process process) throws IOException{
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()))) {
reader.lines().forEach(line -> System.out.println(line));
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}
void shutdownFast() {
Process p = child;
if (p != null) {
p.destroy();
}
}