首页 > 编程语言 >Java 21的Process API的笔记

Java 21的Process API的笔记

时间:2024-09-13 22:13:23浏览次数:10  
标签:Java 获取 Process 退出 API stderr 进程

  • Java Core Libraries

  • Process API

  • Process API Classes and Interfaces

    • ProcessBuilder Class
      指定新进程的命令,工作路径,环境变量,指定输入和输出流即stdin/stdout/stderr
    • Process Class
      提供操作子进程的方法,比如
      • 等待子进程结束。
      • 获取进程的信息比如是否存活、进程ID、基本信息、退出的状态。
      • 获取输入和输出流即stdin/stdout/stderr
      • 获取子进程启动的子进程,即当前进程的孙进程。
      • 杀死子进程。
    • ProcessHandle Interface
      提供操作进程的方法,比如
      • 获取当前进程。
      • 获取指定进程ID的进程。
      • 获取当前进程的父进程。
      • 获取当前进程有权限访问的进程的列表。
      • 获取进程的信息比如是否存活、进程ID、基本信息、退出的状态。
      • 获取子进程启动的子进程,即当前进程的孙进程。
      • 杀死子进程。
    • ProcessHandle.Info Interface
      获取进程的基本信息,比如命令行和参数、启动时间、消耗的CPU时间、用户等。
      启动时间,指的是启动时刻,还是从启动时刻到当前的时长,后续实测。
  • Creating a Process
    ProcessBuilder的文档值得阅读。

  • Getting Information About a Process
    获取进程的基本信息,比如命令所在路径、启用时间、用户等。

  • Redirecting Output from a Process
    使用Runtime.getRuntime()来启动子进程时,需要手工读取子进程的stdoutstderr,否则可能子进程的输出缓冲区满而导致子进程阻塞。
    就本问题而言,解决方案是创建两个线程,在线程中读取stdoutstderr

  • Filtering Processes with Streams
    ProcessHandle.allProcesses返回当前进程有权限查看的进程的列表。
    考虑到进程的创建、退出均为异步操作,因此列表中的进程,也许不一定处于存活的状态。

  • Handling Processes When They Terminate with the onExit Method
    通过Process.onExitProcessHandle.onExit,可以在进程退出时定义回调函数,当进程退出时,执行一些必要的操作,比如记录日志、进程的退出错误码等。
    后续要阅读文档,确认回调触发的时机,在进程即将退出前回调还是在退出之后回调,个人推测,应当是进程退出后触发回调。
    ComputableFuture的文档,值得阅读。

    • thenAccept
    • thenApply
    • thenRun
    • thenApplyAsyc
  • Controlling Access to Sensitive Process Information
    对于使用SecurityManager管理权限的Java应用,赋予运行期权限manageProcess后,允许:

    • 查看进程的重要信息,比如用户、用户组、启动路径、参数等。
    • 杀掉进程,包括非当前进程创建的进程。

参考资料

标签:Java,获取,Process,退出,API,stderr,进程
From: https://www.cnblogs.com/jackieathome/p/18412993

相关文章

  • 大模型API的响应内容(markdown语法)在Html中显示实例
    获取大模型API的响应内容的函数返回returnresponse.choices[0].messagefromzhipuaiimportZhipuAIdefget_response_from_model(question):client=ZhipuAI(api_key='your_api_key')response=client.chat.completions.create(model='glm-4-plus&......
  • JAVA Response 返回值再拿
    一:概述在现代Web开发中,与外部服务交互是一个常见的需求。Java作为一门广泛使用的编程语言,提供了多种方法来发送HTTP请求并处理响应。本文将探讨在Java中获取HTTP响应的不同方法,并提供实际案例。二:具体说明<1>使用java.net.HttpURLConnectionHttpURLConnection是Java标准库中一个古......
  • Java学习全套视频教程网盘资源下载
    如大家所了解的,Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。Java之所以可以让计算机识别,是因为Java的编译器和Java虚拟机,它会将人按照一定规范写成的信息翻译成机器所能识别二进制的信息,这样就可以让我们很好的和计算机进......
  • Java Server Page动态包含与重定向
    一、动态包含需求:我希望能够在我的页面中包含一个音频分析:在页面被请求的时候动态地包含另一个JSP页面或者静态资源(如HTML页面、图片等)的内容。假设我已经有一个名为audio.jsp的页面。当服务器处理包含<jsp:includepage="audio.jsp"/>的JSP页面时,它会将audio.jsp页面的......
  • 为什么在EffectiveJava中建议用EnumSet替代位字段,以及使用EnumMap替换序数索引
    在EffectiveJava中的第36条中建议用EnumSet替代位字段,在第37条中建议用EnumMap替换序数索引,为什么?EnumSet在EffectiveJava中的第36条中建议用EnumSet替代位字段36、用EnumSet替代位字段如果枚举类型的元素主要在Set中使用,传统上使用int枚举模式,通过不同的......
  • Java方法:重载
    重载是在一个类中,有相同的函数名称,但是形参不同的函数。方法的重载的规则:方法名称必须相同。参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。方法的返回类型可以相同也可以不同。仅仅返回类型不同不足以成为方法的重载。实现理论:方法名称相同时,编译器会根......
  • 免费试用谷歌云API指南
    在云计算时代,各个云服务商提供的服务越来越多,为了方便用户在不同的云服务商之间进行选择,很多云厂商都开发了相应的API供用户调用。使用谷歌云API,可以让用户轻松调用谷歌云上的各种服务。现在,我们将以GoogleCloudPlatform(GCP)为例,向大家介绍使用谷歌云API的具体方法。......
  • 学习笔记 韩顺平 零基础30天学会Java(2024.9.13)
    P545TreeMap源码解读     TreeSet的k-v其中的v是一个静态的对象,但是TreeMap的v是可以变化的     TreeMap使用默认构造器取出的顺序和添加的顺序是不一样的,但是有构造器实现了Comparator接口的匿名内部类,可以按顺序排序P546Collections工具类1P547Collect......
  • 为什么在EffectiveJava中建议用EnumSet替代位字段,以及使用EnumMap替换序数索引
    在EffectiveJava中的第36条中建议用EnumSet替代位字段,在第37条中建议用EnumMap替换序数索引,为什么?EnumSet在EffectiveJava中的第36条中建议用EnumSet替代位字段36、用EnumSet替代位字段如果枚举类型的元素主要在Set中使用,传统上使用int枚举模式,通过不同的2的......
  • Rust使用Actix-web和SeaORM开发WebAPI通过Swagger UI查看接口文档
    本文将介绍Rust语言使用Actix-web和SeaORM库,数据库使用PostgreSQL,开发增删改查项目,同时可以通过SwaggerUI查看接口文档和查看标准Rust文档开始项目首先创建新项目,名称为rusty_crab_apicargonewrusty_crab_apiCargo.toml[dependencies]sea-orm={version="1.0.0-rc.5......