Java-API简析_java.lang.ProcessBuilder类(基于 Latest JDK)(浅析源码)

news2024/11/26 14:39:27

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131729933
出自【进步*于辰的博客】

因为我发现目前,我对Java-API的学习意识比较薄弱,需要慢慢习惯使用Java-API,乃至剖析源码来提升自己的源码阅读能力和编码素质。
大家如果需要Java-API文档,我上传了【https://download.csdn.net/download/m0_69908381/87691693】。

注:源博文:Java-API简析_java.lang.Process类(基于 Latest JDK)(浅析源码)。

文章目录

  • 1、概述
  • 2、构造方法摘要
    • 2.1 List`<String>` command
    • 2.2 String... command
  • 3、方法摘要
    • 3.1 List`<String>` command()
    • 3.2 ProcessBuilder command(List`<String>` command)
    • 3.3 ProcessBuilder command(String... command)
    • 3.4 File directory()
    • 3.5 ProcessBuilder directory(File directory)
    • 3.6 Map<String, String> environment()
    • 3.7 boolean redirectErrorStream()
    • 3.8 ProcessBuilder redirectErrorStream(boolean redirectErrorStream)
    • 3.9 Process start()

1、概述

public final class ProcessBuilder extends Object

此类用于创建操作系统进程。

每个 ProcessBuilder 实例管理一个进程属性集start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。

每个进程生成器管理这些进程属性:

  • 命令 是一个字符串列表,它表示要调用的外部程序文件及其参数(如果有)。在此,表示有效的操作系统命令的字符串列表是依赖于系统的。例如,每一个总体变量,通常都要成为此列表中的元素,但有一些操作系统,希望程序能自己标记命令行字符串——在这种系统中,Java 实现可能需要命令确切地包含这两个元素。
  • 环境 是从变量 的依赖于系统的映射。初始值是当前进程环境的一个副本(请参阅 System.getenv()(见源博文第2.7项))。
  • 工作目录。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名。
  • redirectErrorStream 属性。最初,此属性为 false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream()(见源博文第2.4项)和 Process.getErrorStream() 方法来访问。如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。

修改进程构建器的属性将影响后续由该对象的 start() 方法启动的进程,但从不会影响以前启动的进程或 Java 自身的进程。

大多数错误检查由 start() 方法执行。可以修改对象的状态,但这样 start() 将会失败。例如,将命令属性设置为一个空列表将不会抛出异常,除非包含了 start()

注意,此类不是同步的。 如果多个线程同时访问一个 ProcessBuilder,而其中至少一个线程从结构上修改了其中一个属性,它必须 保持外部同步。

很容易启动一个使用默认工作目录和环境的新进程:

Process p = new ProcessBuilder("myCommand", "myArg").start();

下面是一个利用修改过的工作目录和环境启动进程的例子:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory("myDir");
Process p = pb.start();

要利用一组明确的环境变量启动进程,在添加环境变量之前,首先调用 Map.clear()

从以下版本开始:
1.5

2、构造方法摘要

2.1 List<String> command

利用指定的操作系统程序和参数构造一个进程生成器。
说明:
看源码。
在这里插入图片描述

2.2 String… command

利用指定的操作系统程序和参数构造一个进程生成器。
说明:
看源码。
在这里插入图片描述
这2个构造方法皆只是将命令参数command赋值/遍历赋值于当前命令

3、方法摘要

3.1 List<String> command()

返回此进程生成器的操作系统程序和参数。

3.2 ProcessBuilder command(List<String> command)

设置此进程生成器的操作系统程序和参数。

3.3 ProcessBuilder command(String… command)

设置此进程生成器的操作系统程序和参数。

3.4 File directory()

返回此进程生成器的工作目录。

3.5 ProcessBuilder directory(File directory)

设置此进程生成器的工作目录。

3.6 Map<String, String> environment()

返回此进程生成器环境的字符串映射视图。

3.7 boolean redirectErrorStream()

通知进程生成器是否合并标准错误和标准输出。

3.8 ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

设置此进程生成器的 redirectErrorStream 属性。

3.9 Process start()

使用此进程生成器的属性启动一个新进程。


本文持续更新中。。。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts_柱状图+漏斗图

目录 柱状图(bar)需求[1] 复制案例[2] 修改类目轴方向[3] 修改数据渲染方向[4] 修改坐标轴文本样式 漏斗图(funnel)漏斗图的形状 柱状图(bar) 需求 如上图&#xff0c;做一个横向柱状图&#xff0c;后端返回的数据是从小向大排列的数据&#xff0c;希望能够按照顺序进行展示。…

pnpm安装方式

pnpm安装方式 要使用pnpm进行安装&#xff0c;首先需要确保已经安装了Node.js。然后&#xff0c;按照以下步骤进行pnpm的安装&#xff1a; 打开终端或命令提示符。 在命令行中输入以下命令来全局安装pnpm&#xff1a; npm install -g pnpm这将使用npm将pnpm包全局安装到您的…

WireShark

文章目录 IP协议部分协议对应协议号路由器IP分片IP分片的缺点 TCP协议[TCP MSS](https://blog.csdn.net/meihualing/article/details/113739693) UDP协议ARP ICMPDHCPDNSFTP wireshark可以学习网络协议&#xff0c;解决一些问题 IP协议 IP指网际互连协议&#xff0c;Internet P…

动态规划01背包之1049 最后一块石头的重量 II(第9道)

题目&#xff1a; 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 。那么粉碎的可能结果如下&#xff1a; …

Verilog 学习之路

循环 7-10 代码段 generategenvar i;for (i0; i<8; i i1) begin: my_block_nameassign out[i] in[8-i-1];end endgenerate解释 该代码使用了 S y s t e m V e r i l o g SystemVerilog SystemVerilog 中的 g e n e r a t e generate generate 构造&#xff0c;它允许在…

【Docker】快速入门,带你快速了解 Docker

文章底部有投票活动&#xff0c;赶快参与进来吧&#x1f603; 相信大家在开发过程中都听说过 Docker 一词&#xff0c;至于 Docker 在开发中扮演的角色&#xff0c;估计好多人都说不上来&#xff0c;今天就让阿Q带大家一起揭开它神秘的面纱&#xff01; 文章目录 什么是容器&a…

【C++初阶】C++入门——内联函数、auto、范围for、nullptr

文章目录 一、内联函数1.1 定义1.2 特性 二、auto关键字2.1 简介2.2 auto使用细则2.3 不能使用auto的场景 三、基于范围的for循环3.1 范围for的使用条件 四、指针空值nullptr 一、内联函数 普通的函数在调用的时候会开辟函数栈帧&#xff0c;会产生一定量的消耗&#xff0c;在C…

《算法竞赛·快冲300题》每日一题:“推箱子”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 推…

1 考试宝自建题库使用说明

注意&#xff1a; 标准格式&#xff1a;括号里不写对象&#xff0c;然后答案行数另取一行&#xff0c;放在选项后一行也是可以的&#xff0c;选项可以横排或者竖排。横排的话选项要用空格隔开&#xff0c;选项的ABCD要加"."&#xff0c;如A. B. C. D. 1. 法治中国…

多个电源模块带电感,给一个负载用的直流压降仿真-CORE电源

多个电源模块带电感,给一个负载用的直流压降仿真-CORE电源 下面介绍如何对多个电源模块带电感,给一个负载用的直流压降仿真,常见于CPU的CORE电源。以下图为例 具体操作步骤如下 设置VRAM(因为是多个电源输出,所以每个电源都要设置成VRAM)

【C语言】轻松模拟实现qsort函数

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我们今天接着上回更新的内容&#xff0c;讲讲我们如何模拟实现自己的qsort函数&#xff0c; 废话不多说&#xff0c;我们开始今天的内容。 模拟实现qsort函数 qsort函…

文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;59&#xff09;-- 算法导论6.4 3题 三、对于一个按升序排列的包含 n 个元素的有序数组 A 来说&#xff0c;HEAPSORT 的时间复杂度是多少?如果 A 是降序呢? 文心一言&#xff1a; 对于一个按升序排列的包含 n 个元素的有序数组…

ModaHub魔搭社区:AI原生云向量数据库Weaviate 对比 Milvus

通过以下一系列能力比较 Weaviate 对比 Milvus。我们希望您选择适合您的最佳开源数据库,即使它不是我们。 Weaviate 与 Milvus 可扩展性对比 Weaviate Milvus 计算存储分离 ❌ ✔️ 支持 10 亿级向量数据 ❌ ✔️ 云原生 ✔️ ✔️ 多副本 ✔️ ✔️ 查询插入分离

第一次用用Opencv进行图像处理

2023.7.06更新 codeblocks安装opencv 直接放参考链接&#xff0c;完成安装该步骤来&#xff0c;简单高效&#xff01; 安装教程链接 有一个问题就是第一次安装完成后运行时会报确实某些ddl的错误&#xff0c;关机重启就好啦&#xff01; 尝试运行 ddl的错误解决后可以用以…

用Python采用Modbus-Tcp的方式读取PLC模块数据

使用计算器得到需要的寄存器地址 这里PLC地址是83,对应的程序16进制读取地址是53 实际上由于PLC地址从1开始&#xff0c;所以这里实际地址应该是52&#xff0c;因为计算机从0开始 使用网络调试助手生成报文 使用Python中的内置函数int()。以下是将人员卡号’b’3b44’转换为十…

mac批量提取文件夹的名称,怎么操作?

mac批量提取文件夹的名称&#xff0c;怎么操作&#xff1f;很多小伙伴想知道在mac电脑上可以一键快速批量的将大量文件夹的名提取出来&#xff0c;而不是采用一个一个名称提取的方法&#xff0c;这是一个有利于提高工作效率的办法&#xff0c;这一项技能在网上几乎找不到解决办…

智能感测型静电消除器的原理

感测型静电消除器是一种能够监测和消除静电的装置。静电是由于物体表面积聚了不平衡的电荷而产生的现象&#xff0c;常常会引发电击、火花、物体吸附等问题。 感测型静电消除器通常包含以下几个主要部分&#xff1a; 1. 传感器&#xff1a;用于检测静电电荷的存在和强度。传感…

V4l2-ctl

1 v4l-utils v4l-utils是一种用于处理媒体设备的软件包&#xff0c;它主要包含两个常用工具1&#xff1a; media-ctl&#xff1a;用于配置拓扑结构中各节点的format、大小、链接&#xff1b;操作/dev/medio0节点&#xff1b;获取Camera支持数据格式等。v4l2-ctl&#xff1a;用…

Java面试为啥会越来越难?

最近感慨面试难的人越来越多了&#xff0c;一方面是市场环境&#xff0c;更重要的一方面是企业对Java的人才要求越来越高了。 基本上这样感慨的分为两类人&#xff0c;第一&#xff0c;虽然挂着3、5年经验&#xff0c;但肚子里货少&#xff0c;也没啥拿得出手的项目&#xff0c…

追妹神器,恋爱神器,哄老婆开心,智能机器人每天给你心爱的TA发送早晚安问候

柠檬恋爱助理配置文档 柠檬恋爱助理插件是利用微信测试公众号&#xff0c;实现每天给你的TA发送早晚安等模板消息的一款全自动化插件&#xff0c;恋爱神器、追妹神器。真正做到只需简单配置&#xff0c;就可以实现哄你的TA开心快乐每一天。 项目地址&#xff1a;点击查看 体…