4

特定の URL から HTTP ステータス コードを取得するための基本的なコードがいくつかあります。

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 で、同じ URL に対して約 10 個の Java インスタンスが生成されていることがわかりました。

つまり、次のように実行します。

java -jar HTTP.jar {URL}

htopを実行したときに、そのコマンドを約10回確認します。それらはスレッドではなく通常のプロセスのように見え、htop で「ユーザーランドスレッドを非表示」をオンにしています。何が起こっている?複数の要求が送信されていますか、それとも 1 つだけですか?

4

1 に答える 1

0

うっかりコマンドを複数回実行してしまいました。&これは、シェル コマンドの URL でエスケープに失敗した場合に発生する可能性があります。Bash はこの&文字を「このコマンドをバックグラウンドで実行する」ことを意味するものとして解釈し、シェル プロンプトが返されますが、プロセスはまだ実行されています。

URL を一重引用符で囲むと、問題は発生しません。

于 2013-03-12T12:47:55.053 に答える