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 中我打开了“隐藏用户态线程”。到底是怎么回事?是发送多个请求还是仅发送一个?

4

1 回答 1

0

您无意中多次运行该命令。如果您未能&在 shell 命令中的 URL 中转义,则可能会发生这种情况。Bash 将该&字符解释为“在后台运行此命令”,并且您返回 shell 提示符,但您的进程仍在运行。

将 URL 放在单引号中,您将不会遇到问题。

于 2013-03-12T12:47:55.053 回答