需要爬取的頁面,會在每次訪問時都在服務器端形成一個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("執行失敗");
}
}