java_调用命令关闭进程,java关闭进程

标签:
育儿 |
分类: JAVA/J2se/J2ee |
做hadoop的实验的时候,老师要求使用统计单词的这个功能,统计单词并不难,主要是要统计的单词从哪里来,因为是做大数据嘛,统计的单词当然不能是几M或者是几十M,那样怎么也体现不出来hadoop的神效啊,哈哈,老师要求的是必须有最好800M的单词量,说实话这么大的文本量根本找不出来,只有自己随机生成了。
生成的单词的坏处就是完全没有意义,第二就是可能单词的重复率较低,这样就会使后面的输出结果比较大,这也是可以理解的,因为没有更好的解决方案。
现在遇到的一个问题就是,因为生成的时间比较长,我马上要回去休息了,但是放在这里一夜让程序运行也是不靠谱的事情,可能得不到我想要的结果,如果得到的数据量太大,我都懒得打开,估计会把我的电脑卡死,只有考虑使用多线程技术让当达到要求后结束进程,
为什么要多线程,1我还没怎么使用过多线程技术,顺便练练手,2如果不是多线程技术每次生成一个单词都计算大小,这真是太浪费了,
一次我设置的是每隔5秒钟来进行检查一下,当检测到满足要求的时候就可以结束进程了,如图:
程序如下:
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Scanner;
public class CheckSize implements Runnable
{
int pauseTime;
String filename = "D:\\345.txt";
int size;
public CheckSize(int pauseTime, String filename, int
size)
{
this.pauseTime = pauseTime;
this.filename = filename;
this.size = size;
}
public void kill() throws IOException
{
java.lang.Process process =
Runtime.getRuntime().exec("tasklist");
Scanner in = new Scanner(process.getInputStream());
while (in.hasNextLine())
{
String p = in.nextLine();
System.out.println(p);
if (p.contains("java.exe"))
{
StringBuffer buf = new StringBuffer();
for (int i = 0; i < p.length(); i++)
{
char ch = p.charAt(i);
if (ch != ' ')
{
buf.append(ch);
}
}
//
System.out.println(buf.toString().split("Console")[0].substring("javaw.exe".length()));
Runtime.getRuntime().exec("tskill
"+buf.toString().split("Console")[0].substring("java.exe".length()));
}
}
}
@Override
public void run()
{
// TODO Auto-generated method stub
File file = new File(filename);
while (true)
{
try
{
System.out.println(filename + ":" + new
Date(System.currentTimeMillis()) + " size= " + file.length() /
1024.0 / 1024 + " M");
if (file.length() / 1024 / 1024.0 > 800)
{
//kill java
kill();
}
Thread.sleep(pauseTime);
} catch (Exception e)
{
System.out.println(e);
}
}
}
public static void main(String[] args)
{
Thread thread = new Thread(new CheckSize(5000, "D:\\345.txt",
1));
thread.run();
}
}
元谋人
2014年6月6日23:10:46