Java-执行系统命令进程-实践篇

1 需求


2 接口


3 示例

import java.io.IOException;

/**
 * 现象:1输出后马上输出2
 * 原因:子进程如果没有调用waitFor(),不会阻塞主进程
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(1);

        try {
            Runtime.getRuntime().exec("ping www.baidu.com -n 100");
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(2);
    }
}

3 示例:

import java.io.IOException;

/**
 * 现象:1输出后,命令执行完后,才会输出2
 * 原因:子进程调用waitFor(),且没有设置等待时长,所以,只有命令执行完,才会输出2
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(1);

        try {
            Process process = Runtime.getRuntime().exec("ping www.baidu.com -n 100");

            process.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(2);
    }
}

3 示例:

import java.io.IOException;
import java.util.concurrent.TimeUnit;

/**
 * 现象:1输出后,等待10秒后,立刻输出2
 * 原因:子进程调用waitFor(),且设置等待时长时:
 * 如果命令执行时间小于设置等待时长,那么,命令执行完后,立刻输出2;
 * 如果命令执行时长大于设置等待时长,那么,等待时长到时,立刻输出2;
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(1);

        try {
            Process process = Runtime.getRuntime().exec("ping www.baidu.com -n 100");

            process.waitFor(10, TimeUnit.SECONDS);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(2);
    }
}

3 示例

import java.io.IOException;
import java.util.concurrent.TimeUnit;

/**
 * 现象:1输出后,由于命令1秒就可以执行完成,不用等到10秒,1秒之后就立刻输出2
 * 原因:子进程调用waitFor(),且设置等待时长时:
 * 如果命令执行时间小于设置等待时长,那么,命令执行完后,立刻输出2;
 * 如果命令执行时长大于设置等待时长,那么,等待时长到时,立刻输出2;
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(1);

        try {
            Process process = Runtime.getRuntime().exec("ping www.baidu.com -n 1");

            process.waitFor(10, TimeUnit.SECONDS);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(2);
    }
}

3 示例:

import javax.rmi.PortableRemoteObject;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

/**
 * 现象:1输出后,由于命令1秒就可以执行完成,不用等到10秒,1秒之后就立刻输出2
 * 原因:当循环调用系统命令(如:反编译APK,调用jadx),如果被调用的命令并行数量有限制的话
 * 如果调用waitFor,由于发送cmd命令很快,不管是否设置等待时长,会导致jadx进程激增,最终导致系统崩溃
 * 只有调用Thread.sleep(),才可以控制jadx进程的数量
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(1);

        for (int i = 0; i < 100; i++) {
            try {
                Process process = Runtime.getRuntime().exec("cmd /c ping www.baidu.com -n 100");

//                process.waitFor(10, TimeUnit.SECONDS);
//                process.waitFor();
                Thread.sleep(10);
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println(2);
    }
}

3 示例:

结论:exitValue()是非阻塞的,在调用这个方法时,外部命令并没有返回,所以,引起异常。

import java.io.IOException;

public class Test {
    public static void main(String[] args) {
        System.out.println(1);

        try {
            Process process = Runtime.getRuntime().exec("cmd /c ping www.baidu.com -n 100");
            System.out.println(process.exitValue());
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(2);
    }
}


3 示例

import java.io.IOException;

public class Test {
    public static void main(String[] args) {
        System.out.println(1);

        try {
            Process process = Runtime.getRuntime().exec("javac");
            System.out.println(process.waitFor());
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(2);
    }
}

3 示例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Test {
    public static void main(String[] args) {
        System.out.println(1);

        try {
            Process process = Runtime.getRuntime().exec("javac");

            InputStream inputStream = process.getErrorStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "GBK");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String line = null;
            while ((line=bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
            System.out.println(process.waitFor());
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(2);
    }
}


4 参考资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/286182.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全局异常和自定义异常处理

全局异常GlobalException.java&#xff0c;basePackages&#xff1a;controller层所在的包全路径 import com.guet.score_management_system.common.domian.AjaxResult; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bi…

CMake是什么?为什么学习CMake

文章目录 1.CMake简介2.为什么要学习CMake3.什么样的项目需要用CMake3.1大型或复杂项目3.2跨平台项目3.3需要高度定制化构建的项目3.4 研究和开源项目3.5小型或简单项目 4.CMake的作用5.支持的编译器5.1Windows平台5.2Unix/Linux平台5.3macOS平台5.4其他编译器5.5支持的平台 CM…

“AI+低代码”推动高等教育变革:腾讯云携手同济大学共探数智化

引言 近年来&#xff0c;数字化转型已成为各行各业提高运营效率和生产力的重要手段。而对于高校来说&#xff0c;转型已成为建设高质量教育体系的重要策略。但相较于迈出较早一步的企业群体&#xff0c;本身缺乏技术基因和运营成本的学校在数字化的转型上还较为滞后。 如何改变…

图神经网络——图学习

图学习 0. 前言1. 图2. 图学习3. 图神经网络小结 0. 前言 近年来&#xff0c;从社交网络到分子生物学等各个领域&#xff0c;数据的图表示越来越普遍。图神经网络 (Graph Neural Network, GNN) 是专为处理图结构数据而设计的&#xff0c;要充分挖掘图表示的潜力&#xff0c;深…

软件测试/测试开发丨接口测试学习笔记分享

一、Mock 测试 1、Mock 测试的场景 前后端数据交互第三方系统数据交互硬件设备解耦 2、Mock 测试的价值与意义 不依赖第三方数据节省工作量节省联调 3、Mock 核心要素 匹配规则&#xff1a;mock的接口&#xff0c;改哪些接口&#xff0c;接口哪里的数据模拟响应 4、mock实…

DevC++ easyx实现视口编辑--像素绘图板与贴图系统

到了最终成果阶段了&#xff0c;虽然中间有一些代码讲起来没有意思&#xff0c;纯靠debug,1-1解决贴图网格不重合问题&#xff0c;这次是一个分支结束。 想着就是把瓦片贴进大地图里。 延续这几篇帖子&#xff0c;开发时间也从2023年的4月16到了6月2号&#xff0c;80小时基本…

【Linux】进程控制深度了解

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握Linux下的进程控制 > 毒鸡汤&#xff…

Spring Boot快速搭建一个简易商城项目【四,优化购物车篇】

在之前的基础上继续将购物车进行完善&#xff1a;全选&#xff0c;删除&#xff0c;加减购物车数量 效果&#xff1a; 全选&#xff1a; 计算价格&#xff1a; //计算总价function jisuan(){let total 0;$(".th").each((i,el)>{//each遍历 i下标 el指的是当前的…

Goole上架年度总结(2023年)

今天来总结一下2023年关于谷歌商店上架的相关政策改动和对应的拒审解决方法。 目录 政策更新与改动2023 年 2 月 22 日2023 年 4 月5 日2023 年 7 月 12 日2023 年 10 月 25 日 开发者计划政策拒审邮件内容和解决办法 政策更新与改动 2023 年 2 月 22 日 生效日期&#xff1…

普中STM32-PZ6806L开发板(HAL库函数实现-TIM5捕获上升沿, 获取输入频率)

简介 通过TIM5_CH1捕获上升沿电平, 两个上升沿的计数值计算频率;电路原理图 连接图 将 PC7 与 PA0使用跳线进行连接 其他知识 APIs /* Blocking mode: Polling */ HAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel); // 堵塞捕获开启 HAL_St…

什么是高防 IP?哪些行业适合用高防 IP?

在数字化浪潮席卷全球的今天&#xff0c;网络安全问题日益凸显。有听说过“高防 IP”这个名词吗&#xff1f;它究竟是什么东西&#xff0c;又能在哪些领域大显身手呢&#xff1f; 一、什么是高防 IP&#xff1f; 高防 IP&#xff0c;顾名思义&#xff0c;就是具备高级防护能力…

深度生成模型之图像翻译GAN ->(个人学习记录笔记)

文章目录 深度生成模型之图像翻译GAN图像翻译的应用1. 风格迁移2. 数据增强3. 经典图像任务4. 内容创作5. 人脸图像编辑6. 人体图像编辑 图像翻译模型1. 有监督图像翻译模型2. 无监督图像翻译模型3. 多域图像翻译模型 深度生成模型之图像翻译GAN 图像翻译的应用 1. 风格迁移 …

Vue:使用IDEA开发Vue的相关配置

一、IDEA无法识别.vue文件 1、IDEA 添加Vue插件 2、添加Vue配置 File | Settings | Editor | File Types 找到 HTML 文件 在下面点号 输入*.vue 二、IDEA无法创建.vue文件 1、问题 在开发过程中&#xff0c;发现创建文件的界面&#xff0c;没有vue模板 2、相关配置 Fi…

MATLAB指令

01--根据数学公式进行绘制 1.绘制连续函数 ①一元函数 t0:0.1:10; y3*t2; plot(t,y) ②一元二次函数 t0:0.1:10; yt.*t; plot(t,y) 注意此处应为点乘 ③一元3次 t0:0.1:10; yt.*t.*t; plot(t,y) ④y1/t t0:0.1:10; y1./t; plot(t,y) ⑤yexp(t) t0:0.1:10; yexp(2*t); p…

BIO和NIO编程(待完善)

目录 IO模型 BIO NIO 常见问题 IO模型 Java共支持3种网络编程IO模式&#xff1a;BIO&#xff0c;NIO&#xff0c;AIO BIO 同步阻塞模型&#xff0c;一个客户端连接对应一个处理线程 代码示例&#xff1a; Server端&#xff1a; public class BioServer {private static …

ARM NEON 指令

NEON指令 按照操作数类型可以分为正常指令、宽指令、窄指令、饱和指令、长指令。 正常指令&#xff1a;生成大小相同且类型通常与操作数向量相同到结果向量。长指令&#xff1a;对双字向量操作数执行运算&#xff0c;生产四字向量到结果。所生成的元素一般是操作数元素宽度到…

PS插件一键生成超治愈向日葵花海

金黄色的向日葵总能给人带来治愈的感觉&#xff0c;仿佛在这里能够疗愈心灵所有的伤口。今天我们通过START AI来生成一片美丽的向日葵花海~ 这是小编使用的关键词&#xff0c;负面词需要填写你不想要拥有的&#xff0c;能够让生成的结果更贴合你的想法 最后的生成效果就如下图…

清风数学建模写作

Overview 标题 摘要&#xff01;&#xff01;&#xff01;&#xff08;1000字&#xff09; 开头 中间 解决的问题 应用的方法 得到的结果 结尾 应用价值、本文亮点 关键词&#xff08;3-6个&#xff09; 积累、二次拓展 目录 1.问题重述 拆分背景与问题&#xff0c;也可以结…

菜鸟之MATLAB学习——QPSK OQPSK信号生成及频谱分析

本人MATLAB学习小白&#xff0c;仅做笔记记录和分享~~ % qpsk && oqpsk clc; close all;Ts1; fc10;N_sample16; N_sum100; dt1/fc/N_sample; t0:dt:N_sum*Ts-dt; Tdt*length(t);d1sign(randn(1,N_sum)); d2sign(randn(1,N_sum));gtones(1,fc*N_sample); …

Java基础综合练习(飞机票,打印素数,验证码,复制数组,评委打分,数字加密,数字解密,抽奖,双色球)

练习一&#xff1a;飞机票 需求: ​ 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 ​ 按照如下规则计算机票价格&#xff1a;旺季&#xff08;5-10月&#xff09;头等舱9折&#xff0c;经济舱8.5折&#xff0c;淡季&#xff08;11月到来…