2013-03-12 70 views
4

我有一些相當基本的代碼從給定的URL獲取HTTP狀態代碼:HttpURLConnection產生大量的進程?

URL url = new URL(args[0]); 
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.setConnectTimeout(10000); 
connection.setReadTimeout(10000); 
connection.setInstanceFollowRedirects(true); 

int code = connection.getResponseCode(); 
connection.disconnect(); 

System.out.print(code); 
System.exit(0); 

顯然一切都是try/catch塊內,但他們做的是一個錯誤退出。該代碼似乎工作,所以我跑了一個URL列表反對它。我監視了進程,並注意到在一些URL上,生成了大約10個用於相同URL的Java實例。

換句話說,我會跑:

java -jar HTTP.jar {URL} 

,看到該命令的10倍左右,當我跑HTOP。他們看起來像常規進程,而不是線程,並且在htop中我已經「隱藏用戶區線程」打開。到底是怎麼回事?是發送多個請求還是隻有一個?

回答

0

您無意中多次運行該命令。如果您未能在shell命令的URL中轉義&,就會發生這種情況。 Bash將&字符解釋爲「在後臺運行此命令」的意思,並且您會返回shell提示符,但您的進程仍在運行。

將網址放在單引號中,您不會遇到問題。

+0

不是,那不是。我正在測試的網址中沒有任何網址在網址中。這似乎只在頁面需要很長時間才能加載時發生。我創建了一個PHP頁面,在輸出任何內容之前等待5秒鐘,這似乎觸發了多個進程。 – Rsaesha 2013-03-12 13:44:26

+0

它們也出現在頂部嗎? – artbristol 2013-03-12 14:24:59