需要爬取的页面,会在每次访问时都在服务器端形成一个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("执行失败"); } }