需要爬取的页面,会在每次访问时都在服务器端形成一个excel进程。。。撑不了多久。。服务器就被这些excel进程堵死了,页面根本无法响应。。。。
找到页面的开发商,说是windows的bug。。。没有办法关闭。。。
后来,从高手那里得到了一条windows命令,可以用来在cmd中关闭excel进程:
taskkill -f -im excel.exe
在网上搜一下,看看taskkill的参数,如何关闭远程计算机上的指定进程:
taskkill /s ip /u username /p password -f -im excel.exe
但是高手说,windows的命令,只能以天为单位来定时执行。。。这个周期对于我来讲。。。太长啦。。。。。。。。
再网上搜了下,发现java竟然可以调用本机的命令来执行!
太强大啦~~~~~~~~~
String cmd = "cmd /c taskkill /s ip /u username /p password -f -im excel.exe";
Process process = Runtime.getRuntime().exec(cmd);
注意:
在字符串命令中,最前面一定加上:cmd,如果是windows98、2000,还要写成:command.exe
字符串命令中的/c,表示执行完cmd窗口,将其关闭
这样一来,用java写个线程就OK啦~~~~~~~~~~
放在服务器上,让他每分钟都跑一次~哈哈哈哈哈~
没想到,通过java解决了windows的bug~哈哈~
public void run() {
while(true){
try {
this.execTest();
sleep(1000*60l);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
break;
}
}
}
private void execTest() {
try {
String cmd = "cmd /c taskkill /s ip /u username /p password -f -im excel.exe";
String words = "";
Process process = Runtime.getRuntime().exec(cmd);
boolean flag = false;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ( (words=bufferedReader.readLine()) != null){
System.out.println(words);
flag = true;
}
if(flag){
System.err.println("*************** 程序执行中。。。请勿关闭!谢谢 ***************");
}
try {
process.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
System.out.println("执行失败");
}
}