首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java ProcessBuilder运行外壳脚本挂起

Java ProcessBuilder是Java提供的一个用于创建操作系统进程的类。它允许我们通过Java代码执行外部的Shell脚本,并且可以控制进程的输入、输出和错误流。

当使用ProcessBuilder运行外壳脚本时,如果脚本本身会导致进程挂起,那么Java程序也会被挂起,直到外壳脚本执行完毕或者被手动中断。

这种情况下,可以考虑使用以下方法来解决挂起的问题:

  1. 异步执行:可以使用Java的多线程机制,在一个单独的线程中执行外壳脚本,这样可以避免主线程被挂起。可以使用Java的Executor框架来实现异步执行,例如使用ThreadPoolExecutor来管理线程池。
  2. 超时机制:可以设置一个超时时间,如果外壳脚本执行时间超过了设定的超时时间,就中断进程。可以使用Java的Timer类或者ScheduledExecutorService来实现超时机制。
  3. 使用非阻塞IO:如果外壳脚本需要与Java程序进行交互,可以考虑使用非阻塞IO来处理输入、输出和错误流。可以使用Java的NIO库或者第三方库如Netty来实现非阻塞IO。
  4. 使用操作系统级别的工具:如果以上方法无法解决问题,可以考虑使用操作系统级别的工具来执行外壳脚本,例如使用操作系统的定时任务来执行脚本,或者使用操作系统的后台任务管理器来执行脚本。

总结起来,Java ProcessBuilder可以用于运行外壳脚本,但如果脚本会导致进程挂起,需要采取相应的措施来解决挂起的问题,例如异步执行、超时机制、非阻塞IO或者使用操作系统级别的工具。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Linux】进程状态&&僵尸进程和孤儿进程&&阻塞、挂起运行

(running):并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。...进程的阻塞、挂起运行 在网上找的一张进程状态图: 终止状态就等价于Z状态和X状态。 4.1 运行 进程运行一般在CPU上运行。...而每一个CPU都会有一个运行队列struct runqueue,要运行进程,就得将进程放入运行队列struct runqueue中。...4.3 挂起 操作系统在运行进程的时候内存时比较吃紧的,一旦进程出于阻塞状态,那么就意味着当前进程不会被调度,这个进程的代码和数据就不会被访问,此时就会把这个进程的代码和数据唤出到磁盘上。...这个进程的PCB还在内存中,只是它的代码和数据在磁盘的swap分区,此时把这种状态叫做阻塞挂起。 这样操作系统就会更合理使用内存资源。 在用户层是感知不到的。 频繁的换入换出,会导致效率问题。

42710
  • Process类详解

    二、安全风险 描述 java.lang.Process 对象描述进程可能需要通过其输入流对其提供输入,并且其输出流、错误流或两者同时会产生输出。...当发生这种情况时,Java 程序可能会阻塞外部进程,同时阻碍Java程序与外部程序的继续运行。因此,在运行一个外部进程时,如果此进程往其输出流发送任何数据,则必须将其输出流清空。...I|O streams 原因 有些本机平台仅针对标准输入和输出流提供有限的=缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败(如不断发送数据),而主进程调用Process.waitfor后已挂起...// Do not let external processes block on I|O streams // 场景一: 使用java.lang.ProcessBuilder.redirectErrorStream...e.pringtStackTrace(); } // 场景三:有时候我们可能需要调用系统外部的某个程序,此时就可以用Runtime.getRuntime().exec()来调用,他会生成一个新的进程去运行调用的程序

    1.6K20

    运行Java

    本节内容较少且相对简单,主要是了解java程序的运行原理,了解javac和java两个命令的作用。内容如导图所示。...1、准备工作 1.1 检验配置 运行java程序的前提是已安装JDK和配置好了环境变量。按win+R键打开命令窗口,输入cmd进入命令提示符工具,输入javac,出现如下内容,表明环境变量配置完成。...2、编译运行 准备工作完成后在上方的目录路径栏输入cmd回车,如下图,分别输入javac Hello.javajava Hello,最后成功输出Hello Java!...javac :负责编译,当执行 javac 时,会启动 java 的编译器程序。 对指定扩展名的 .java 文件进行编译。 生成了jvm可以识别的字节码文件。 2)java命令的作用?...java: 用来执行class字节码文件(即运行java程序) pass:答案其实就在最开始的导图里面 4、IDEA中运行 在IDEA中运行该程序: public class Hello{ public

    25632

    java运行环境_如何搭建Java运行环境?

    前言 对于运行一个Java程序,我们首先需要有一个运行Java程序的平台程序,这个平台程序就是Java虚拟机。...本篇文章将介绍如何在Windows系统上搭建一个Java程序的运行环境,主要分为两个步骤:安装JDK,配置环境变量。...Windows系统Java运行环境配置 下载JDK并安装 首先我们需要下载java开发工具包JDK,JDK中包含了JRE(Java运行环境)和一些官方提供给我们的工具,在oracle的JDK的官方下载页中...JAVA_HOME%jrebin; 分开添加,否则无法识别: 测试JDK是否安装成功 1、win+R 快捷键调出“运行”框,然后输入“cmd” 2、键入命令: java -version、java、...javac 几个命令,出现以下信息,说明环境变量配置成功; 结语 好了,Java运行环境现在已经配置完毕,后面我们就可以编写Java代码,然后在Java平台上运行,开启我们的Java之旅了。

    2.9K20

    Java 运行原理

    http://blog.csdn.net/bingduanlbd/article/details/8332664  (java不错) 在研究Java运行原理之前,我们先把视野放宽一点:一般的高级语言是如何工作的...当我们真正运行程序的时候,CPU是读不懂这些英文的,所以我们需要先转化成可执行的二进制文件,这个过程通常由编译器完成。有些编译器直接将源代码编译成机器码,载入内存后CPU可以直接运行。...因此,想搞清楚java程序到底是如何运行的,重点在于弄明白字节码是如何被转化成跟CPU架构相关的机器码然后被执行的。也就是要理解JVM到底是如何工作的。...当运行这个应用程序时,它会要求操作系统给它独立施展手脚的空间:给我一些内存,给我一定的CPU时间片,然后不用管我了。你可能会问,寄存器是硬件啊,它怎么能划分啊,难道是时间划分?...它从文件系统中将字节码文件载入到操作系统分配给Java虚拟机的内存当中,然后解释字节码,转化成机器码,然后经由操作系统到达CPU运行。整个执行过程如下图所示: ?

    1.5K10

    java运行机制是什么_JAVA运行机制

    这一篇我们来简单理解一下JAVA运行机制 大概可以分为三大部分 1.编写程序 2.编译程序 3.运行程序 1.编写程序 编写程序就是我们前面说的源代码 这些源代码都有特殊的语法 例如main函数 他是...因为 JAVA和大多数语言一样是一种高级语言 我们编写好的代码都被保存成为一个.java的文件 然而我们计算机并不认识(不能运行)这些文件 这就需要把我们编写好的文件(源代码)变成计算机可以运行的机器码...那么就到运行字节码了 其实我们的JAVA语言有一个非常大的特点就是跨平台 用他们话说就是:一次编译,到处运行 前面说过class文件是一种与平台无关的文件 它也不可直接运行 那我们怎么运行呢?...这就要讲到一个东西jvm(JAVA虚拟机) 它可以将我们的class文件解释成计算机可以运行的二进制 那我们的jvm是如何运行的呢 我们都知道所有程序只有在内存中才能运行 所以我们在运行JAVA文件的时候...PS:为什么说JAVA跨平台 1.因为编译后的class文件只能被jvm所解释 2.任何平台只要有jvm(JAVA运行环境)就可以解释这个class文件 3.无论什么平台解释同一个class文件最后的结果都是一样的

    85020

    JAVA运行环境及运行过程简述

    初学java会遇到各种各样的问题,从环境安装到环境运行,都需要重新开始,难免会遇到不少问题,下面,我将从初学java的角度介绍环境的安装及配置过程,及环境运行方法。...环境安装及配置 学习Java需要提前准备好两个东西,一个是JDK,还有一个为记事本,后续的代码编写需要在记事本中进行。...2.记事本下载 记事本小巧轻便,适合初学者编译代码,以下是两个记事本供大家参考,任选其一均可; Sublime Text3下载链接 Notepad++下载链接 代码怎么运行?...不同于C语言的是,初学java运行方式有些不同,下面我将跟大家分享一下最全的代码运行过程: 任意选择一个文件夹创建文本文件 修改文件名为“HelloWorld.java” 右键选择打开方式,以Sublime...(输入回车) java 文件名(输入回车) 7.若代码中有中文注释,则如下图输入 则编译运行成功!

    1.6K30

    java运行环境是什么_Java运行环境是什么

    Java运行环境是什么 来源:华清远见JAVA学院 相信许多人第一次接触java,都分不清Java开发环境和Java运行环境是什么。看似简单的jdk安装,却令许多新手哭笑不得。...一方面是电脑环境不同而造成安装方式也不同,另一方面就是对Java开发环境和Java运行环境的概念和关系不太了解。 Java运行环境是什么?...Java运行环境顾名思义,就是运行Java程序时所需要的环境,英文名称为 JRE(java runtime environment),Java运行环境由JVM和Java SE标准类库组成。...一般情况下,我们只在个人电脑上装上jdk后,就可以运行java程序了。...总结一下:JDK=JRE+开发工具集(例如javac编译工具等);JRE=JVM+java SE标准类库 以上介绍了Java运行环境是什么,并简单梳理了一下JRE与JDK的关系,如果想进一步了解,可以看一下下面的相关内容推荐

    2.1K20

    在线运行Java代码

    “ 本文将探查 javax.tools 包中,并演示如何使用它们实现Java代码的在线编译 。...前言 在一些网站上有过刷题经历的人,一定会用过在线运行代码的功能,这一篇文章我们就是针对这一功能,来看看如何在线运行我们编辑的Java代码?...实际上在JDK1.6的版本中,提供了这样一个包Javax.tools,它可以实现Java 源代码编译,使您能够添加动态功能来扩展静态应用程序,该包是Java 编程语言编译器框架的主要部分,此框架允许框架的客户端查找并运行程序中的编译器...Java代码。...其内部仅仅有一个方法isSupportedOption 具体实现 我们先看一下运行效果,我们可以看到编译跟正常运行没有区别(除了速度) 上面实现没有引入其他自定义开发文件类,如果需要import其他自定义开发文件类

    3.7K21

    java编译和运行

    里面 一般都是进入到这个目录里面编译解释 编译:javac B.java 解释:java B 注意: 解释不可能以带目录的方式去运行程序,编译可以 零:java应用程序的基本结构 一个java应用程序由若干个类组成...paramInt) { this.a = paramInt; return this.a; } } 注意:在编译时候可能会出现的问题 (1)如果回车后出现javac不是内部或外部命令,也不是可运行的程序或批处理文件...static void main(String[] paramArrayOfString) { B b = new B(); System.out.println(b.f(3)); } } 运行...;然后回车确定,再使用java解释器运行主类。...(3)不可以带着目录运行程序,比如 java C:\ts\B 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/130476.html原文链接:https://javaforall.cn

    93510

    Java并发编程:如何创建线程?

    public void run() { System.out.println("name:"+name+" 子线程ID:"+Thread.currentThread().getId()); } }    运行结果...从输出结果可以得出以下结论:   1)thread1和thread2的线程ID不同,thread2和主线程ID相同,说明通过run方法调用并不会创建新的线程,而是在主线程中直接运行run方法,跟普通的方法调用没有任何区别...2)通过Runtime的exec方法来创建进程   首先还是来看一下Runtime类和exec方法的具体实现,Runtime,顾名思义,即运行时,表示当前进程所在的虚拟机实例。   ...由于任何进程只会运行于一个虚拟机实例当中,所以在Runtime中采用了单例模式,即只会产生一个虚拟机实例: public class Runtime { private static Runtime.../ http://www.cnblogs.com/ChrisWang/archive/2009/12/02/use-java-lang-process-and-processbuilder-to-create-native-application-process.html

    78940

    Java中的进程与线程

    Java作为一种面向对象的编程语言,提供了对进程和线程的支持。本文将详细介绍Java中的进程和线程的概念、特点以及使用方法。...每个进程都有自己的内存空间和系统资源,可以独立运行。进程之间相互独立,互不干扰。进程的特点(1)独立性:进程拥有自己的内存空间和系统资源,互不干扰。...(3)并发性:多个进程可以同时运行,实现并发执行。 (4)异步性:进程之间的执行顺序是不确定的,可能会出现交替执行的情况。...三、Java中的进程操作创建进程 在Java中,可以使用ProcessBuilder类来创建一个新的进程。ProcessBuilder类提供了一种灵活的方式来构建和管理进程。...下面是一个创建新进程的示例代码:ProcessBuilder processBuilder = new ProcessBuilder("command", "arg1", "arg2");processBuilder.directory

    16920

    Java执行Shell命令的方式

    Java可以使用Runtime和ProcessBuilder两种方式执行Shell命令。...一、使用Runtime执行Shell命令 Java的Runtime类提供了一个可以执行系统命令的方法,exec()方法可以执行任何系统命令,例子如下: try {     Process process...二、使用ProcessBuilder执行Shell命令 JavaProcessBuilder类可以用于创建操作系统进程。...它可以接受一个字符串命令列表,可以更方便的设置环境变量和工作目录,代码示例: ProcessBuilder processBuilder = new ProcessBuilder("ls", "/home...也就是说,Java运行的环境是否有权限执行指定的Shell命令,否则会抛出权限错误。 另外,如果Shell命令执行时间过长,可能会导致Java主线程阻塞等待。

    3.1K40

    java编译过程_Java编译运行过程

    Java编译运行过程 在上一篇文章中,我们了解了第一个Java入门程序,以及如何编译和运行第一个Java程序。本文主要了解以下编译和运行Java程序时会发生什么。此外,我们还会分析一些常见的问题。...1 Java程序编译过程 在编译时,Java文件由Java编译器(它不与底层操作系统交互)将Java代码转换为字节码(.class)。...2 Java程序运行过程 在Java程序运行中,会执行以下步骤: 类加载器(Classloader):类加载器是JVM的子系统,用于加载类文件。...3 两个常见的问题 3.1 Java源文件命名方式 问题:一个class的名称为Simple,Java源文件名称可以不是Simple.java么?...3.2 一个Java源文件写多个类 问题:一个Java源文件中可以写多个类么? 答案是可以的。

    2.1K10

    java和javac编译运行java程序

    目录 目录 前言 编译命令介绍 javac java 代码编译与运行 java类发现规则 分离class和java文件 参考链接 前言 给自己定了一个月学习JVM虚拟机的计划,不管有没有卵用,学点新东西总是好的...下面,主要是总结一些如何在命令行中编译java程序。主要是想记录总结一下java的类发现原则。 编译命令介绍 其实,java编译过程主要使用了javac和java两个命令。...代码编译与运行 这里介绍一个带package的测试用例。以前大家在学习javac编译的时候,都是在默认包下进行的编译,一般不会出问题,但是遇到带package的类就不一样了。...我们先尝试禁用一下classpath,禁用的方法是在运行javac的时候,指定 -classpath ""。...CompileClass.java 执行的时候,命令如下: java -classpath ".." jvm.CompileClass ---- 分离.class和.java文件 在了解了java类发现规则之后

    3K30
    领券