- 浏览: 65326 次
最新评论
-
fandayrockworld:
p.waitFor();avery_leo 写道Java代码 ...
Java调用Linux命令 -
673341766:
a.bat又是什么批处理, 兄弟能写清楚吗.
Java调用windows程序 -
673341766:
Process p1 = ru.exec("C ...
Java调用windows程序 -
avery_leo:
Java代码
public static double[] ...
Java调用Linux命令 -
xiaoxin5230:
想问一下高手,请问怎样获取发送邮件的大小啊!我用getSize ...
JAVAMAIL发送邮件
Java可以直接调用Linux命令,形式如下:
Runtime.getRuntime().exec(command)
举例:运行ls,top命令可以这样:
Runtime.getRuntime().exec("ls");
但是这样执行时没有任何输出,原因:
调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例,
(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例),
该实例可用于控制进程或取得进程的相关信息. 由于调用Runtime.exec方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream()方法重定向给它的父进程了.用户需要用这些stream来向子进程输入数据或获取子进程的输出. 可以采用如下方法:
try
{
Process process = Runtime.getRuntime().exec ("ls");
InputStreamReader ir=newInputStreamReader(process.getInputStream());
LineNumberReader input = new LineNumberReader (ir);
String line;
while ((line = input.readLine ()) != null){
System.out.println(line)
}
catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
}
评论
p.waitFor();
public static double[] getMemUsage() throws Exception {
double[] result = new double[4];
Process p = rt.exec("free -m");// 调用系统的命令
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
public static double[] getMemUsage() throws Exception {
double[] result = new double[4];
Process p = rt.exec("free -m");// 调用系统的命令
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
Java代码
int m = 0;
if (str.indexOf("/") != -1) {// MemUsed
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 3) {
result[1] = Double.parseDouble(tmp);
}
}
}
if (str.indexOf("Mem") != -1) {// MemTotal
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 2) {
result[0] = Double.parseDouble(tmp);
}
}
}
}
p.getErrorStream();
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
p.destroy();
}
// System.out.println("Performance Monitoring menUsed:" + result[1]);
return result;
int m = 0;
if (str.indexOf("/") != -1) {// MemUsed
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 3) {
result[1] = Double.parseDouble(tmp);
}
}
}
if (str.indexOf("Mem") != -1) {// MemTotal
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 2) {
result[0] = Double.parseDouble(tmp);
}
}
}
}
p.getErrorStream();
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
p.destroy();
}
// System.out.println("Performance Monitoring menUsed:" + result[1]);
return result;
}
在一个线程(假设1毫秒一次)中,无限循环执行上面的代码:
大概20分钟左右后出现如下异常:
java.io.IOException: Cannot run program "free": java.io.IOException: error=24, Too many open files
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at LinuxSystemTool.getMemUsage(LinuxSystemTool.java:98)
at LinuxSystemTool.exec(LinuxSystemTool.java:67)
at LinuxSystemTool.run(LinuxSystemTool.java:42)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.IOException: java.io.IOException: error=24, Too many open files
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 7 more
查看网络相关资料,大概了解可能是由于打开的句柄过多造成,也没有找到解决办法,不吝赐教,谢谢
public static double[] getMemUsage() throws Exception {
double[] result = new double[4];
Process p = rt.exec("free -m");// 调用系统的命令
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
public static double[] getMemUsage() throws Exception {
double[] result = new double[4];
Process p = rt.exec("free -m");// 调用系统的命令
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
Java代码
int m = 0;
if (str.indexOf("/") != -1) {// MemUsed
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 3) {
result[1] = Double.parseDouble(tmp);
}
}
}
if (str.indexOf("Mem") != -1) {// MemTotal
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 2) {
result[0] = Double.parseDouble(tmp);
}
}
}
}
p.getErrorStream();
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
p.destroy();
}
// System.out.println("Performance Monitoring menUsed:" + result[1]);
return result;
int m = 0;
if (str.indexOf("/") != -1) {// MemUsed
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 3) {
result[1] = Double.parseDouble(tmp);
}
}
}
if (str.indexOf("Mem") != -1) {// MemTotal
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 2) {
result[0] = Double.parseDouble(tmp);
}
}
}
}
p.getErrorStream();
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
p.destroy();
}
// System.out.println("Performance Monitoring menUsed:" + result[1]);
return result;
}
在一个线程(假设1毫秒一次)中,无限循环执行上面的代码:
大概20分钟左右后出现如下异常:
java.io.IOException: Cannot run program "free": java.io.IOException: error=24, Too many open files
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at LinuxSystemTool.getMemUsage(LinuxSystemTool.java:98)
at LinuxSystemTool.exec(LinuxSystemTool.java:67)
at LinuxSystemTool.run(LinuxSystemTool.java:42)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.IOException: java.io.IOException: error=24, Too many open files
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 7 more
查看网络相关资料,大概了解可能是由于打开的句柄过多造成,也没有找到解决办法,不吝赐教,谢谢
发表评论
-
Struts中logic:iterate标记的使用
2005-09-11 10:07 812=======Struts中logic:iterate标记的使 ... -
Hibernate-Extension和Middlegen-Hibernate
2005-09-11 19:35 1667参考Hibernate 开发指南V1.0作者:夏昕 xiaxi ... -
Log4j配置
2006-01-18 11:18 828Log4j配置所需文件:1、jar包 : commons-lo ... -
Hibernate3.0批量更新和批量删除
2006-03-15 16:24 1224Hibernate3.0对批量更新和批量删除提供了支持,能够直 ... -
JavaMail核心类
2006-03-23 14:08 1206... -
JAVAMAIL发送邮件
2006-03-24 09:38 1827发送邮件: 1.创建一个邮件会话(MailSession ... -
Tomcat 通过数据库验证的配置方法(BASIC,FORM).
2006-11-07 13:19 28731.Tomcat默认验证的配置 通过tomcat-user.x ... -
Tomcat内存配置
2006-11-10 09:45 2018%TOMCAT_HOME%/bin/catalina.sh ... -
Apache + Tomcat*2集群 负载平衡(Linux环境)
2006-11-15 11:06 1360Apache + Tomcat*2集群 负载平衡(Linux环 ... -
Hibernate 本地SQL查询SQLQuery
2007-03-26 10:10 1575使用SQLQuery对原生SQL查询执行的控制是通过SQLQu ... -
JAVA访问LDAP
2007-05-09 15:12 1551import java.util.Properties;i ... -
Hibernate3支持DetachedCriteria(转贴)
2007-06-08 16:46 1214Hibernate3支持DetachedCriteria,这是 ...
相关推荐
Java程序调用linux命令、脚本,支持程序在服务器上使用linux命令。工具类为:ProcessUtil,支持单个命令和批量命令执行函数,同时在工具类中添加了getFileLineNumByCmd函数支持通过linux命令获取文件行数的样例。
java调用linux系统命令的封装工具类。
本文将详细介绍如何使用Java调用Linux命令,以满足特定场景的需求,如文中提到的通过Java接口重启keepalived服务。首先,我们将理解Java调用Linux命令的基本原理,然后通过具体的代码示例来展示实现这一功能的过程。...
java调用Linux命令获取输出流,用于解决获取不到输出流的方法
本文将详细探讨如何利用Java调用Linux命令,这一技能对于任何希望在Java应用中集成Linux功能的开发者来说都是至关重要的。 ### Java调用Linux命令的方法 Java提供了多种方式来执行外部命令或脚本,其中最常用的是...
2. **Java调用Linux命令** - 在Java中,可以通过`Runtime.getRuntime().exec()`或`ProcessBuilder`类来执行Linux命令。在描述中提到的`getDiskUsage`方法就使用了`ProcessBuilder`来执行`df -hl -P`命令,获取磁盘...
在Linux系统下,Java编程语言提供了丰富的API来执行操作系统级别的命令。这主要通过`java.lang.Runtime`类和`java.lang.ProcessBuilder`类实现。本文将深入讲解如何在Java程序中调用Linux命令,并通过实例来阐述这一...
java 执行linux命令源码,java调用shell脚本源码,java web发布war到tomcat,servlet文件上传,ajax文件上传。 java web 上传war包、停止、启动、发布tomcat。 命令修改成自己的目录即可使用。
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
使用java远程调用Linux命令_java-linux-command
在这个特定的问题"Java调用Linux CentOS系统安装的OpenOffice4报错"中,开发者可能在尝试使用Java来自动化处理文档,如转换Office格式,而OpenOffice4提供了一个开源的解决方案,可以将Microsoft Office文档转换为...
SSHXCUTE.jar是一个Java库,它允许程序员通过SSH连接到Linux系统并执行shell命令,而无需深入了解SSH的底层细节。 SSHXCUTE.jar的核心功能包括: 1. **建立SSH连接**:通过提供主机名、用户名、密码或密钥对信息,...
java代码执行linux系统命令
Java中常用的Linux命令 Linux命令是Java开发中不可或缺的一部分,掌握这些命令可以提高开发效率和解决问题的能力。本文总结了常用的Linux命令,涵盖文件管理、进程管理、网络管理、文件传输和其他方面。 文件管理 ...
Java调用DOS命令是指在Java程序中执行操作系统级别的命令,比如Windows下的CMD命令或Linux下的Shell命令。这种功能在很多场景下都很有用,比如自动化脚本、文件操作、系统管理等。Java提供了Runtime类和...
总的来说,Java通过JSch库远程登录Linux服务器并执行命令,是Java与Linux系统交互的一种常用方式,尤其适用于自动化运维和脚本化的任务。通过理解并实践这些代码,你将能够更好地理解和掌握Java进行远程操作的能力。
在Java编程环境中,远程登录Linux系统并执行命令是一项常见的任务,尤其在自动化运维、系统管理以及分布式系统中。本文将详细讲解如何实现这一功能,并基于给出的“AutoStart”文件名,推测这是一个自动启动相关服务...
在Unix或Linux系统中,你可能会使用`libreoffice --view`或者`open`命令来打开.doc文件。 总的来说,Java调用doc命令涉及了Java与操作系统交互的能力,这在系统集成、自动化测试或文件处理场景中非常常见。正确理解...
本项目专注于使用Java语言构建一个针对Linux操作系统的简单命令解释器,这为理解这两者的结合提供了一个实用的学习平台。以下是关于这个项目的详细知识点: 1. **Java语言**:Java是一种跨平台的面向对象的编程语言...