Java启动子进程,子进程又启动孙进程后,Java在InputStream inputStream = process.getInputStream();中读取时,何时会返回null?

Qlib数据获取避坑指南:从CSV导入到自定义数据源的完整解决方案 本文详细解析了Qlib数据获取的完整解决方案,从CSV导入到自定义数据源,涵盖了股票数据处理的关键技巧和常见陷阱。特别针对Qlib平台的数据格式要求和复权处理提供了实用指南,帮助量化投资者高效整合Wind等第三方数据源,确保数据质量与模型性能。 阅读详情

Java启动子进程,子进程又启动孙进程后,Java在InputStream inputStream = process.getInputStream();中读取时,何时会返回null?

情况1:
如果java启动的是python命令行进程,而python又用subprocess.Popen启动子进程:


如果subprocess.Popen启动子进程时没有带close_fds=True参数,只有python进程和孙进程都退出时,才会返回null。

如果subprocess.Popen启动子进程时带close_fds=True参数,当孙进程是控制台进程,只有python进程和孙进程都退出时,才会返回null。

如果subprocess.Popen启动子进程时带close_fds=True参数,当孙进程是非控制台进程,只要python进程退出,就会返回null,而不需要孙进程退出。

 

情况2:

如果java启动的不是python进程,而是一个普通的控制台程序,情况和上面的一致。也就是说,普通的控制台程序和python命令行进程等价的。


情况3:
如果java启动的是非控制台程序,再由这个非控制台程序去启动控制台和非控制台,情况和上面一致。

 

总结一下:

不管子进程是什么进程,只要孙进程是控制台程序,那么只有子进程和孙进程都退出,读取时才会返回null。
当孙进程是非控制台程序时,只要bInheritHandles为FALSE,此时只要子进程退出读取时就可以返回null了,不需要孙进程退出。


由此得出原理(为啥没见过书上这么写过):

只有拥有这个流的所有进程都退出,流才会返回null。

只要bInheritHandles为TRUE,子进程就会继承父进程的标准流。

如果bInheritHandles为FALSE,当子进程是控制台程序时仍然会继承父进程的标准流。而非控制台程序就不会继承了,而是新建自己的标准流。

 

注:Java启动子进程时,默认会新建标准流给子进程用。

 

【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层 用过CASS的人都知道,野外数字测图得到的点数据(平面坐标)可以直接导入到CASS中,进一步绘制地形图。那么,带有坐标的数据能不能在ArcGIS中实现点图层的生成呢?答案是必须的! 本文以气象台站shp数据的生成为例,详细介绍ArcGIS 10.2中导入X、Y坐标(这里指的是经度、纬度),生成Shapefile点数据的流程。 相关阅读:《全站仪、RTK测量坐标数据在CASS和ArcGIS中展点的区别和联系》 目录 1、数据准备 2、添加X、Y数据 3、属性表连接(Join) 4、导出为Sh. 阅读详情

相关推荐

云架构师进阶【SAP迁移方案设计】手把手教您玩转SAP上云

一,项目背景介绍 今天又接到了北京某制造企业SAP迁移的场景,先简单说明一下,好好的SAP在运行着为什么要做迁移这类大动作呢?众所周知SAP的ERP是企业的绝对核心系统,尤其对于制造业更是核心的系统,这样一套核心系统还是生产环境在迁移的过程中必然要面临比较大的挑战,如果有任何问题的话,都会对企业的绩效产生很大的影响。 经过跟客户沟通才得知,客户的SAP原来的系统是托管在运营商机房里,近期感染了勒索病毒,导致业务宕机,SAP应用服务器无法启动,仅有的数据库服务器可以运行。基于上述情况公司领导当机立断决定迅

bdsh818的博客 4220

Java Process getInputStream()方法与示例

流程类的getInputStream()方法 (Process Class getInputStream() method) getInputStream() method is available in java.lang package. getInputStream()方法在java.lang包中可用。 getInputStream() method is used to get the ...

cumtv80668的专栏 8993

f2fs学习笔记 - 3. F2FS文件系统布局

目录1.前言2.F2FS布局说明2.1. super block(block 0x0 ~ block 0x1ff)2.2 CP(block 0x200 ~ block 0x5ff)cp page1nat journalsit journaldata summarycurrent hot node summarycurrent warm node summarycurrent cold node summarycp page22nd checkpoint2.3 SIT(block 0x600 ~ block

HZero 4645

java process 输出流_Java Process getInputStream()方法

Java Process getInputStream()方法java.lang.Process.getInputStream()方法获取子进程的输入流。数据流获取由该Process对象表示的进程的标准输出流管道的数据。1 语法public abstract InputStream getInputStream()2 参数无3 返回值此方法返回输入流连接到子进程的正常输出。4 示例package...

weixin_39636253的博客 1685

对话系统简介

《文本上的算法》学习笔记1、问答型1.1、基于语义分析的方法1.2、基于信息抽取的方法1.3、端对端的方法2、任务型2.1、生成式模型( Generative Model )2.2、判别式模型( Discrimitive Model )2.3、规则系统3、闲聊型3.1、规则方法3.2、生成模型3.3、检索方法 个人认为NLP领域最难的方向可以说是阅读理解与文本生成/摘要,而对话系统,尤其是闲聊常常...

盘一哈nlp 6752

soul聊天协议逆向

通过观察上面的CFG发现,该混淆符合以下逻辑,整体思路就是先查找主分发器,一般被引用次数最多的那个块就是主分发器,引用主分发器的块大概率是真实块,再使用unicorn模拟执行,遍历每一个分支,记录每一个块,如果某一个块是上次记录的块则也为真实块,无后继的块则为retn块,剩下的就是无用块。通过Frida Hook libc.so后发现,聊天协议走的是JAVA层的socket,然后Hook JAVA层相关函数得到如下调用堆栈。里面调用的函数不是很多,所以。不行不行,革命要彻底!

2503_90751789的博客 3209

inputstream 关闭 java,从getInputStream正确关闭Java Process InputStream

I could not find clarification of this in the documentation.But when we have a Process object and call getInputStream(),Do we get a new stream that we should explicitly close when we are done with it?...

weixin_31022203的博客 594

从零构建边缘AI数据管道:K230+ESP8266的物联网实践指南

本文详细介绍了如何利用K230开发板和ESP8266模块构建高可靠性的边缘AI数据管道,特别针对智能农业监测场景。通过完整的系统架构设计、AI模型部署、低功耗通信优化和云端集成方案,为开发者提供了一套可落地的物联网实践指南,重点解决了边缘计算环境下的数据传输稳定性和能效管理问题。

j2k3l4的博客 872

java 中getinputstream_java.lang.Process.getInputStream()方法实例

全屏java.lang.Process.getInputStream()方法获取子进程的输入流。数据流获取由该Process对象表示的进程的标准输出流管道的数据。声明以下是java.lang.Process.getInputStream()方法的声明publicabstractInputStreamgetInputStream()参数NA返回值此方法返回输入流连接到子进程的正常输出。异常NA...

weixin_33173924的博客 673

YOLO蒸馏原理篇之---MGD、CWD蒸馏

本文详细介绍了特征蒸馏中的两种经典有效方法,MGD和CWD蒸馏

qq_41920323的博客 3240

rk628d修改默认分辨率

在rk3568上使用628d hdmi转mipi,在628d已经调试好的情况下,客户新增需求:视频输入这边的推荐分辨率固定在1024x768。

m0_60805802的博客 2053

SQLite3 + Spring boot 使用快速入门

1、SQLite 是一个 C 语言库,它实现了一个小型快速独立高可靠性功能齐全开源的关系型嵌入式 SQL 数据库引擎。SQLite 是世界上使用最广泛的数据库引擎。SQLite 内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。2、SQLite文件格式是稳定的、跨平台的和向后兼容的,开发人员承诺在2050 年之前保持这种状态。SQLite 数据库文件通常用作容器,在系统之间传输丰富的内容,并用作数据的长期存档格式。有超过 1 万亿 个 SQLite 数据库正在积极使用。

蚩尤后裔-汪茂雄 1万+

【100%通过率】华为OD机试真题 Java&Go 实现【查找单入口空闲区域】【2022.11 Q4 新题】

给定一个 m xn 的矩阵,由若干字符 和0构成,X表示该处已被占据,0"表示该处空闲,请找到最大的单入口空闲区域.解释:空闲区域是由连通的O组成的区域,位于边界的0可以构成入口,单入口空闲区域即有目只有一个位于边界的0作为入口的由连通的'O"组成的区域。 如果两个元素在水平或垂直方向相邻,则称它们是“连通”的。

MISAYAONE的博客 2万+

Java多进程编程实战:从ProcessBuilder到进程间通信与性能优化

在并发编程领域,多线程是Java开发者最熟悉的技术,它通过共享内存实现高效协作。然而,当面临内存隔离、故障容错或资源扩展等需求时,多进程模型展现出独特价值。其核心原理在于操作系统为每个进程分配独立的地址空间,实现故障隔离与资源独立管理。从技术价值看,多进程能有效规避单JVM内存限制,防止因单个任务内存泄漏导致整体崩溃,同时更纯粹地利用多核CPU资源。典型应用场景包括大数据处理、科学计算、插件隔离及分布式系统雏形构建。本文以Java的ProcessBuilder API为切入点,深入探讨进程生命周期控制、输入

weixin_30520015的博客 414

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java多进程编程实战:从ProcessBuilder到进程间通信

在并发编程领域,多线程是Java开发者处理高并发任务的基础技术,它通过共享内存实现高效通信。然而,当应用场景需要更强的隔离性、更高的稳定性或与系统原生应用深度交互时,多进程编程便成为关键技术补充。多进程通过操作系统级别的进程隔离,提供了更高的容错性和资源独立性,能够突破单JVM的内存限制,安全执行外部命令。其核心原理在于创建独立的操作系统进程,并通过进程间通信(IPC)机制进行数据交换。在Java工程实践中,ProcessBuilder API提供了现代、安全的进程创建与管理能力,而基于标准流的通信、Soc

weixin_30423977的博客 351

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Process应用之惑

很多时候,我们需要调用系统命令来做些处理。比如,在程序中ping设备是否能连接,执行数据库的自动备份,以及程序的重启。这时候我们必须要使用Process类来完成这些功能。 一般情况下,我们都会将命令执行过程中的信息输出,以便检查问题。但有时候我们还需知道这个执行的进程在什么时候结束,因为不仅要知道结束了,还要知道该进程完成时返回的结果。 可能会说,这些不都是...

茶花漫道 653

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java process exec_java通过Runtime和Process类调用外部命令

还有许多地方未理解,仅供参考,后续待完善。参考:https://www.cnblogs.com/xxpal/articles/824963.html举例:Process process;process=Runtime.getRuntime().exec("cmd /c tasklist|findStr \"Manager\"");try{InputStream inputStream=proces...

weixin_29696999的博客 845

【踩坑】:request.getInputStream()获取的值为空

request.getInputStream()获取的值为空

m0_52861211的博客 5176

java调用process线程阻塞问题的解决

java调用process线程阻塞问题的解决

u011250186的博客 2836

java process 输出流,java遇到Process 输出流阻塞的问题

今天发现之前写的一个程序,在程序中调用外部程序,需要把进程的InputStream的内容返回,在这个过程中,之前采用的直接获取,发现存在InputStream的结果太大,导致外部进程阻塞。经过查资料,发现网上有InputStream流按照byte[]数组来读取,把内容拼接组成返回结果,这样可以解决进程阻塞的问题,但是存在内容读取重复的问题,而且不易解决。如果返回结果是字符串,最后在看到一个把Inp...

weixin_29614791的博客 791

使用ProcessBuilder执行本地程序的注意事项

错误代码 public static void main(String[] args) throws IOException, InterruptedException { ProcessBuilder processBuilder = new ProcessBuilder("java","-version"); Process process = processBuilder.start(); InputStream inputStream =

xcdsdf14545的博客 2255

Java创建进程读取Process.getInputStream阻塞问题

在某个 k8s pod 中,通过 Java 代码创建进程执行其他程序时,被阻塞了很久。

adrninistrat0r的博客 1164

Process类:创建子进程进行输入和输出 --《JAVA编程思想》78

Process 可调用CMD 或者 SHELL命令

BaymaxCS的博客 2587

Java Process详解

Process简介 我们在实际Java开发工作中可能会遇到调用操作系统命令的场景,比如查看下文件夹,执行下sh/exe文件等等,那么我们就要用到Process了! 首先,打开API来认识下Process : java.lang 类 Process java.lang.Object 继承者 java.lang.Process public abstract class Process extends Object

杜海的博客 1万+

java process inputstream,Process.waitFor(),线程和InputStreams

用伪代码,这是我在做什么:Process proc = runtime.exec(command);processOutputStreamInThread(proc.getInputStream());processOutputStreamInThread(proc.getErrorStream());proc.waitFor()但是,有时processOutputStreamInThread看不...

weixin_29912855的博客 765

如何获取Process的数据流??

如何获取Process的数据流,依靠getInputStream和getOutputStream方法了,但是!需要注意的是: Input和Output都是针对当前调用Process的程序而言的,而不是针对Process! 也就是说如果你要往Process进程中输入数据,那么你要调用Process的getOutputStream方法! 相反,如果你要获取Process进程的输出数据,那么你要调用P...

weixin_39809036的博客 1261
上一篇: eclipse中的设计模式
下一篇: 学习android的过程
backard
博客等级 码龄23年 18粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值