一、概述
Process类是一个抽象类(所有的方法均是抽象的),封装了一个进程(即一个执行程序)。
Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,该实例可用来控制进程并获取相关信息。
创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程。父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。
当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程。
二、API预览
destroy()
杀掉子进程。
exitValue()
返回子进程的出口值。
InputStream getErrorStream()
获得子进程的错误流。
InputStream getInputStream()
获得子进程的输入流。
OutputStream getOutputStream()
获得子进程的输出流。
waitFor()
导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止。
三、如何创建Process对象,一般有一下两种方法:
1、每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。(ProcessBuilder这个是JDK5中新添加的final类,详细请参看“深入研究java.lang.ProcessBuilder类”一文。
2、Runtime.exec() 方法创建一个本机进程,并返回 Process 子类的一个实例。详细请参看“深入研究java.lang.Runtime类”一文。
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class TestShellCommand {
public static void main(String args[]){
try
{
String commands = "sh /home/duck/a.sh 20120919";
Process process = Runtime.getRuntime().exec (commands);
// for showing the info on screen
InputStreamReader ir=new InputStreamReader(process.getInputStream());
BufferedReader input = new BufferedReader (ir);
String line;
while ((line = input.readLine ()) != null){
System.out.println(line);
}
}//end try
catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
}
}
}
-------------------------a.sh
#!/bin/bash
echo "dddddddddddddddddd${1}eeeeeeeeeeeee"
echo "filename:${0}"
分享到:
相关推荐
Java 调用 Shell 命令 在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的...
### Java调用Shell命令知识点详解 #### 一、概述 在特定的应用场景中,比如完成外币资金的调度工作后,可能需要通过Java程序来生成一个文本文件,并进一步利用Shell脚本来实现文件传输等操作。这涉及到Java与操作...
基于sshConnect的linux服务器的shell命令调用,并获取命令返回结果的实例。亲测有效!
总之,Java调用Shell脚本是一个有效的方法来在Java程序中实现复杂的Linux环境下的操作,这种技术尤其适用于需要进行系统级操作和自动化任务的场景。掌握这一技术可以帮助开发者更好地实现跨平台的功能,尤其是在开发...
Java调用Shell命令并获取执行结果的示例 在 Java 中调用 Shell 命令并获取执行结果是非常常见的操作,今天我们就来分享一个 Java 调用 Shell 命令并获取执行结果的示例。 Process 和 Runtime 类 在 Java 中,我们...
总结,Java调用Shell脚本是实现系统级任务自动化的重要手段,但同时也需要关注安全性、资源管理和错误处理等问题。通过合理使用Runtime和ProcessBuilder,我们可以构建出高效且安全的Java-Shell交互解决方案。在实际...
Java调用Shell脚本执行DataX任务是一种常见的数据迁移或同步操作。DataX是阿里巴巴开源的数据同步工具,它支持多种数据库之间的数据迁移。在实际应用中,我们可能需要根据特定的业务逻辑,如where条件,来定制数据...
这时,Java提供了调用Shell命令的能力,让我们可以在Java程序中执行Linux或Unix的Shell脚本。本文将详细介绍如何在Java中调用Shell命令,并通过一个具体的实例来展示其实现过程。 首先,Java通过`Runtime....
标题中的“JAVA执行shell命令小工具”指的是使用Java编程语言编写的小程序,它能够执行操作系统级别的Shell命令。在Java中,通常使用`Runtime.getRuntime().exec()`或者`ProcessBuilder`类来实现这一功能。这两个类...
Java调用DOS命令是指在Java程序中执行操作系统级别的命令,比如Windows下的CMD命令或Linux下的Shell命令。这种功能在很多场景下都很有用,比如自动化脚本、文件操作、系统管理等。Java提供了Runtime类和...
### Java调用Shell的基本原理 Java调用Shell主要依赖于`java.lang.Runtime`类中的`exec()`方法。这个方法允许Java程序执行外部命令或程序,包括Shell脚本。`Runtime.getRuntime().exec(command)`方法接受一个字符串...
在Java开发中,有时我们需要远程连接到Linux服务器执行shell命令,比如进行系统管理、自动化运维或者数据处理等任务。在这种情况下,使用SSH(Secure Shell)协议是常见的解决方案,因为它提供了安全的网络通信。...
总之,Java调用shell脚本向DataX传递参数,尤其是在where条件中包含特殊字符时,需要关注字符串转义、shell命令构建以及安全问题。同时,合理设计和使用配置文件能有效提高代码的灵活性和可维护性。
在linux环境中,这三个用户都可以直接在任意目录下执行该shell脚本,可是在java代码中调用shell脚本时,报了如下4个错误: 1、sqlldr: command not found 2、sqlplus: command not found 3、0750: You may need to ...
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
### Java调用Shell脚本详解 #### 一、前言 在实际开发过程中,经常会遇到需要结合Java程序与Shell脚本进行操作的情况。通过Java调用Shell脚本不仅可以实现复杂的功能,还可以提高程序的灵活性和扩展性。本文将详细...
在高级语言如Java或Kotlin中调用shell命令,虽然方便但也存在一些风险,比如可能引入安全漏洞。因此,除非必要,否则应尽量避免在应用程序中使用shell命令,而是利用Android SDK提供的安全且封装好的API。 综上所述...
在Java程序中调用Unix/Linux主机上的Shell命令,并返回相应执行结果。
Java Socket远程调用Shell是一种通过Java程序利用Socket通信协议实现对远程服务器的Shell命令执行的技术。这种方式常用于系统管理、自动化运维或者分布式系统的组件交互。下面将详细介绍这一技术的实现原理、步骤...