java进程
❶ 用java来实现一个进程管理系统
构造方法摘要
ProcessBuilder(List<String> command)
利用指定的操作系统程序和参数构造一个进程生成器。
ProcessBuilder(String... command)
利用指定的操作系统程序和参数构造一个进程生成器。
方法摘要
List<String> command()
返回此进程生成器的操作系统程序和参数。
ProcessBuilder command(List<String> command)
设置此进程生成器的操作系统程序和参数。
ProcessBuilder command(String... command)
设置此进程生成器的操作系统程序和参数。
File directory()
返回此进程生成器的工作目录。
ProcessBuilder directory(File directory)
设置此进程生成器的工作目录。
Map<String,String> environment()
返回此进程生成器环境的字符串映射视图。
boolean redirectErrorStream()
通知进程生成器是否合并标准错误和标准输出。
ProcessBuilder redirectErrorStream(boolean redirectErrorStream)
设置此进程生成器的 redirectErrorStream 属性。
Process start()
使用此进程生成器的属性启动一个新进程。
2.1.2 Runtime
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。
应用程序不能创建自己的 Runtime 类实例。但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为。
Java代码
void addShutdownHook(Thread hook)
注册新的虚拟机来关闭挂钩。
int availableProcessors()
向 Java 虚拟机返回可用处理器的数目。
Process exec(String command)
在单独的进程中执行指定的字符串命令。
Process exec(String[] cmdarray)
在单独的进程中执行指定命令和变量。
Process exec(String[] cmdarray, String[] envp)
在指定环境的独立进程中执行指定命令和变量。
Process exec(String[] cmdarray, String[] envp, File dir)
在指定环境和工作目录的独立进程中执行指定的命令和变量。
Process exec(String command, String[] envp)
在指定环境的单独进程中执行指定的字符串命令。
Process exec(String command, String[] envp, File dir)
在有指定环境和工作目录的独立进程中执行指定的字符串命令。
void exit(int status)
通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。
long freeMemory()
返回 Java 虚拟机中的空闲内存量。
void gc()
运行垃圾回收器。
InputStream getLocalizedInputStream(InputStream in)
已过时。 从 JDK 1.1 开始,将本地编码字节流转换为 Unicode 字符流的首选方法是使用 InputStreamReader 和 BufferedReader 类。
OutputStream getLocalizedOutputStream(OutputStream out)
已过时。 从 JDK 1.1 开始,将 Unicode 字符流转换为本地编码字节流的首选方法是使用 OutputStreamWriter、BufferedWriter 和 PrintWriter 类。
static Runtime getRuntime()
返回与当前 Java 应用程序相关的运行时对象。
void halt(int status)
强行终止目前正在运行的 Java 虚拟机。
void load(String filename)
加载作为动态库的指定文件名。
void loadLibrary(String libname)
加载具有指定库名的动态库。
long maxMemory()
返回 Java 虚拟机试图使用的最大内存量。
boolean removeShutdownHook(Thread hook)
取消注册某个先前已注册的虚拟机关闭挂钩。
void runFinalization()
运行挂起 finalization 的所有对象的终止方法。
static void runFinalizersOnExit(boolean value)
已过时。 此方法本身具有不安全性。它可能对正在使用的对象调用终结方法,而其他线程正在操作这些对象,从而导致不正确的行为或死锁。
long totalMemory()
返回 Java 虚拟机中的内存总量。
void traceInstructions(boolean on)
启用/禁用指令跟踪。
void traceMethodCalls(boolean on)
启用/禁用方法调用跟踪。
2.1.3 Process
不管通过那种方法启动进程后,都会返回一个Process类的实例代表启动的进程,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法:
Java代码
void destroy()
杀掉子进程。
一般情况下,该方法并不能杀掉已经启动的进程,不用为好。
int exitValue()
返回子进程的出口值。
只有启动的进程执行完成、或者由于异常退出后,exitValue()方法才会有正常的返回值,否则抛出异常。
InputStream getErrorStream()
获取子进程的错误流。
如果错误输出被重定向,则不能从该流中读取错误输出。
InputStream getInputStream()
获取子进程的输入流。
可以从该流中读取进程的标准输出。
OutputStream getOutputStream()
获取子进程的输出流。
写入到该流中的数据作为进程的标准输入。
int waitFor()
导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
通过该类提供的方法,可以实现与启动的进程之间通信,达到交互的目的。
2.2 实例
2.2.1 创建子进程
要创建子进程可以通过使用使用ProcessBuilder的start()方法和Runtime的exec()方法。
(1)Runtime.exec()
Java代码
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
public class Test1 {
public static void main(String[] args) {
try {
Process p = null;
String line = null;
BufferedReader stdout = null;
//list the files and directorys under C:\
p = Runtime.getRuntime().exec("CMD.exe /C dir", null, new File("C:\\"));
stdout = new BufferedReader(new InputStreamReader(p
.getInputStream()));
while ((line = stdout.readLine()) != null) {
System.out.println(line);
}
stdout.close();
//echo the value of NAME
p = Runtime.getRuntime().exec("CMD.exe /C echo %NAME%", new String[] {"NAME=TEST"});
stdout = new BufferedReader(new InputStreamReader(p
.getInputStream()));
while ((line = stdout.readLine()) != null) {
System.out.println(line);
}
stdout.close();
} catch (Exception e) {
e.printStackTrace();
}
}
(2)ProcessBuilder
Java代码
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
try {
List<String> list = new ArrayList<String>();
ProcessBuilder pb = null;
Process p = null;
String line = null;
BufferedReader stdout = null;
//list the files and directorys under C:\
list.add("CMD.EXE");
list.add("/C");
list.add("dir");
pb = new ProcessBuilder(list);
pb.directory(new File("C:\\"));
p = pb.start();
stdout = new BufferedReader(new InputStreamReader(p
.getInputStream()));
while ((line = stdout.readLine()) != null) {
System.out.println(line);
}
stdout.close();
//echo the value of NAME
pb = new ProcessBuilder();
pb.command(new String[] {"CMD.exe", "/C", "echo %NAME%"});
pb.environment().put("NAME", "TEST");
p = pb.start();
stdout = new BufferedReader(new InputStreamReader(p
.getInputStream()));
while ((line = stdout.readLine()) != null) {
System.out.println(line);
}
stdout.close();
} catch (Exception e) {
e.printStackTrace();
}
}
从启动其他程序的Java进程看,已启动的其他程序输出就是一个普通的输入流,可以通过getInputStream()和getErrorStream来获取。对于一般输出文本的进程来说,可以将InputStream封装成BufferedReader,然后就可以一行一行的对进程的标准输出进行处理。
通常,一个程序/进程在执行结束后会向操作系统返回一个整数值,0一般代表执行成功,非0表示执行出现问题。有两种方式可以用来获取进程的返回值。一是利用waitFor(),该方法是阻塞的,执导进程执行完成后再返回。该方法返回一个代表进程返回值的整数值。另一个方法是调用exitValue()方法,该方法是非阻塞的,调用立即返回。但是如果进程没有执行完成,则抛出异常。
❷ java怎么杀掉java进程
java中有调用外部程序的类,Runtime.getRuntime().exec("./**.exe");此函数返回的是一个Process 对象,该对象在创建后,可以对它进行 destroy () 杀掉子进程、 waitFor () 导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。 如下例子可以杀掉已经打开的文本进程:
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
publicclassTest
{
publicstaticvoidmain(String[]args)
{
try
{
String[]cmd=
{"notepad.exe"};
Processproc=Runtime.getRuntime().exec(cmd);//开启文本
BufferedReaderin=newBufferedReader(newInputStreamReader(proc
.getInputStream()));
Stringstring_Temp=in.readLine();
while(string_Temp!=null)
{
System.out.println(string_Temp);
if(string_Temp.indexOf("notepad.exe")!=-1)
Runtime.getRuntime().exec("Taskkill/IMnotepad.exe");
string_Temp=in.readLine();
}
}
catch(Exceptione)
{
//结束进程
}
}
结果如下:
❸ 如何修改java程序的进程名
可以在new 线程的时候指定线程名称,如果后期还想修改,可以调用Thread的setName方法:
publicstaticvoidmain(String[]args)throwsInterruptedException{
Threadthread=newThread(newRunnable(){
@Override
publicvoidrun(){
System.out.println(Thread.currentThread().getName());
try{
Thread.sleep(1000);
//主线程中进行了修改
System.out.println(Thread.currentThread().getName());
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
},"这里设置线程名称");
thread.start();
//500毫秒后修改线程名称
Thread.sleep(500);
thread.setName("新的线程名称!");
}
运行结果:
❹ Java进程怎么实现
Java中多进程编程的实现,和多线程一样,多进程同样是实现并发的一种方式,需要的朋友可以参考下
1.Java进程的创建
Java提供了两种方法用来启动进程或其它程序:
(1)使用Runtime的exec()方法
(2)使用ProcessBuilder的start()方法
1.1 ProcessBuilder
ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,此类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法。在J2SE 1.5之前,都是由Process类处来实现进程的控制管理。
每个 ProcessBuilder 实例管理一个进程属性集。start() 方法利用这些属性创建一个新的 Process 实例。start() 方法可以从同一实例重复调用,以利用相同的或相关的属性创建新的子进程。
每个进程生成器管理这些进程属性:
命令 是一个字符串行表,它表示要调用的外部程序文件及其参数(如果有)。在此,表示有效的操作系统命令的字符串行表是依赖于系统的。例如,每一个总体变量,通常都要成为此列表中的元素,但有一些操作系统,希望程序能自己标记命令行字符串——在这种系统中,Java 实现可能需要命令确切地包含这两个元素。
环境 是从变量 到值 的依赖于系统的映射。初始值是当前进程环境的一个副本(请参阅 System.getenv())。
工作目录。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名。
redirectErrorStream 属性。最初,此属性为 false,意思是子进程的标准输出和错误输出被发送给两个独立的流,这些流可以通过 Process.getInputStream() 和 Process.getErrorStream() 方法来访问。如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取,而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。
❺ java.exe 是什么进程!
描述: java.exe是Sun Microsystems公司的相关网络协议软件。通常基于Internet Explorer工作 在一般情况而言,它用到服务器架设所需要一项组件。
❻ java如何启动一个进程
这个问题有点纠结。。。当你运行 static void main()的,,就已经启动进程了呀。不知道是不是这个意思。
❼ java调用进程
String command = "javac –cp . *.java";
//或String []command = {"javac", "–cp .", "*.java"};
Process process = Runtime.getRuntime().exec(command);
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
System.out.println("javac>" + line);
}
//TODO is.close();
int ret = process.waitFor();
❽ java 什么是进程
。。。。。。。。。。。
进程是, 操作系统级别的,分配内存的,任务单位
线程是,程序内部的,共享进程内存的,执行单位
进程是一个项目经理,线程是一堆程序员
项目经理从 老板 那里 拿到 资源和任务,然后各个程序员去干
❾ 如何用Java关闭一个进程
解决这个问题,要看这个进程是java程序自定义的进程,还是操作系统的进程,操作系统的进程,又可以分为windows进程和Linux进程
一、针对操作系统的进程:
1,首先java用户,要具有操作进程的权限
2. 针对windows操作系统的进程,比如QQ进程:
Stringcommand="taskkill/f/imQQ.exe";
Runtime.getRuntime().exec(command);
其中:taskkill 是命令名称,/f /im 是参数,QQ.exe是进程的可执行文件。
3.针对Linux操作系统
Stringcommand="kill/f/imQQ.exe";
Runtime.getRuntime().exec(command);
二、在Java程序中自定义的进程
思路:在线程中设置一个标志变量,当这个变量的值在外界被改变的时候,有机会结束运行的线程
publicclassT{
publicstaticvoidmain(String[]args){
//启动线程
MyThreadthread=newMyThread();
newThread(thread).start();
//你的其它的工作,此时线程在运行中
//你不想让线程干活了,停掉它
//注意,这只是一个标志,具体线程何时停,并不能精确控制
thread.allDone=true;
}
}
{
booleanvolatileallDone=false;
publicvoidrun(){
//每次循环都检测标志
//如果设置停止标志时已经在循环里
//则最长需要等待一个循环的时间才能终止
while(!allDone){
//循环里的工作
}
}
}
❿ java查看进程
/**
* 查询正在运行的系统进程信息
*
* @param processName
* //eclipse.exe
*/
public static String findProcessInfo(String processName) {
BufferedReader bufferedReader = null;
String isF = null;
try {
Process proc = Runtime.getRuntime().exec("tasklist");
bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream(), "GB2312"));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
System.err.println(line + " ");
if (line.contains(processName)) {
isF = line;
break;
}
}
proc.getOutputStream().close();
proc.getInputStream().close();
proc.destroy();
proc = null;
} catch (Exception ex) {
ex.printStackTrace();
}
if (bufferedReader != null) {
try {
bufferedReader.close();
bufferedReader = null;
} catch (Exception ex) {
}
}
return isF;
}
其实就是java调用cmd的命令行实现,这种功能可以应用到很多方面,就看你的熟悉的程度了。