大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
将下面代码里面的processName 变成你这个进程的名字ClientDemo.exe就可以了
创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为乐陵企业提供专业的网站制作、成都网站制作,乐陵网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
BufferedReader br=null;
try{
Process proc=Runtime.getRuntime().exec("tasklist -fi " + '"' + "imagename eq " + processName +'"');
br=new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line=null;
while((line=br.readLine())!=null){
//判断指定的进程是否在运行
if(line.contains(processName)){
return true;
}
}
return false;
}catch(Exception e){
e.printStackTrace();
return false;
}finally{
if(br!=null){
try{
br.close();
}catch(Exception ex){
}
}
}
以下代码就是了。
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;
public class ProcessStarter2 {
public static void main(String args[]) {
Scanner in = null;
PrintWriter writer = null;
try {
System.out.println("\n\nParent Started..");
System.out.println("\nStarting Child Process..");
// Build Child Process from command line arguments
ProcessBuilder pb = new ProcessBuilder("systeminfo");
// Start Child process
Process child = pb.start();
// Get stream from child process (IPC)
InputStream instream = child.getInputStream();
// 因为cmd环境默认编码跟随系统为GB2312
in = new Scanner(instream, "GB2312");
// Read the child process output
System.out.println("\nReading from Child Process..");
FileOutputStream outputStream = new FileOutputStream(new File("d:/testaaaa.txt"));
writer = new PrintWriter(outputStream);
while (in.hasNextLine()) {
writer.println(in.nextLine());
}
child.waitFor(); // parent blocks and waits for child to finish
System.out.println("\nDone.. ");
} catch (Exception e) {
System.out.println(e);
} finally {
if (in != null) {
in.close();
}
if (writer != null) {
writer.close();
}
}
}
}
应用程序很高兴对所有这些活动一无所知。它只知道自己的虚拟地址空间。但是,如果当前在主存中的页面集(称为 驻留集)少于实际要使用的页面集(称为 工作集),应用程序的性能很快就会显著降低。(不幸的是,本文中您将看到,我们要讨论的工具常常交换使用这两个术语,尽管它们指的是完全不同的事物。) Task Manager 和 PerfMon 我们首先考察两种最常见的工具:Task Manager 和 PerfMon。这两个工具都随 Windows 一起提供,因此由此起步比较容易。 Task Manager Task Manager 是一种非常见的 Windows 进程监控程序。您可以通过熟悉的 Ctrl-Alt-Delete 组合键来启动它,或者右击任务栏。Processes 选项卡显示了最详细的信息,如图 2 所示。 图 2. Task Manager 进程选项卡 图 2 中显示的列已经通过选择 View -- Select Columns 作了调整。有些列标题非常含糊,但可以在 Task Manager 帮助中找到各列的定义。和进程内存使用情况关系最密切的计数器包括: Mem Usage(内存使用):在线帮助将其称为进程的工作集(尽管很多人称之为驻留集)——当前在主存中的页面集。但是这个数值包含能够和其他进程共享的页面,因此要注意避免重复计算。比方说,如果要计算共享同一个 DLL 的两个进程的总内存占用情况,不能简单地把“内存使用”值相加。 Peak Mem Usage(内存使用高峰值):进程启动以来 Mem Usage(内存使用)字段的最大值。 Page Faults(页面错误):进程启动以来要访问的页面不在主存中的总次数。 VM Size(虚拟内存大小):联机帮助将其称为“分配给进程私有虚拟内存总数。”更确切地说,这是进程所 提交的内存。如果进程保留内存而没有提交,那么该值就与总地址空间的大小有很大的差别。 虽然 Windows 文档将 Mem Usage(内存使用)称为工作集,但在该上下文中,它实际上指的是很多人所说的驻留集(resident set),明白这一点很重要。您可以在 Memory Management Reference 术语表(请参阅 参考资料)中找到这些术语的定义。 工作集 更通常的含义指的是一个逻辑概念,即在某一点上为了避免分页操作,进程需要驻留在内存中的那些页面。 PerfMon 随 Windows 一起提供的另一种 Microsoft 工具是 PerfMon,它监控各种各样的计数器,从打印队列到电话。PerfMon 通常在系统路径中,因此可以在命令行中输入 perfmon 来启动它。这个工具的优点是以图形化的方式显示计数器,很容易看到计数器随时间的变化情况。 请在 PerfMon 窗口上方的工具栏中单击 + 按钮,这样会打开一个对话框让您选择要监控的计数器,如图 3a 所示。计数器按照 性能对象分成不同的类别。与内存使用关系最密切的两个类是 Memory 和 Process。选中计数器然后单击 Explain 按钮,就可以看到计数器的定义。说明出现在主对话框下方弹出的单独的窗口中。
通过调用Thread.getState()方法获取当前线程的状态。以下是我的代码,可以直接编译运行。
public class Test {
public static void main(String[] args) {
new NewThread().start(); //启动线程
}
}
class NewThread extends Thread{
public NewThread() {
super("NewThread"); //定义当前线程的名称为NewThread
}
@Override
public void run() {
System.out.println("当前线程:"+currentThread().getName()+"运行状态为:"+getState()); //打印线程的运行状态
}
}
"; public static final String ERROR_MESSAGE = "程序执行出错:"; public static void main(String[] args) throws Exception { // 执行程序 Process process = Runtime.getRuntime().exec(COMMAND); // 打印程序输出 readProcessOutput(process); // 等待程序执行结束并输出状态 int exitCode = process.waitFor(); if (exitCode == SUCCESS) { System.out.println(SUCCESS_MESSAGE);} else {System.err.println(ERROR_MESSAGE + exitCode);}} /*** 打印进程输出** @param process 进程*/private static void readProcessOutput(final Process process) { // 将进程的正常输出在 System.out 中打印,进程的错误输出在 System.err 中打印 read(process.getInputStream(), System.out); read(process.getErrorStream(), System.err); } // 读取输入流
前段时间测试的时候发现客户端,双击图标多次回生成多次XXX.exe.所以在启动时判断一下时候有进程已经启动了,下面把代码写出来。 Java代码 public boolean getProcess(){ boolean flag=false; try{ Process p = Runtime.getRuntime().exec( "cmd /c tasklist "); ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream os = p.getInputStream(); byte b[] = new byte[256]; while(os.read(b) 0) baos.write(b); String s = baos.toString(); // System.out.println(s); if(s.indexOf( "Besttone.exe ")=0){ System.out.println( "yes "); flag=true; } else{ System.out.println( "no "); flag=false; } }catch(java.io.IOException ioe){ } return flag; }