Runtime. getRuntime (). exec 실행 차단 문제 해결.
3731 단어 Runtime
cmd 명령 이 실 행 될 때
줄 에 오류 나 경고 가 발생 했 을 때 주 제어 프로그램의 waitfor 방법 이 막 혀 계속 기 다 렸 습 니 다. 자 료 를 찾 아 보 니 Runtime. getRuntime (). exec 방법 은 스스로 처리 해 야 합 니 다.
stderr 및 stdout 흐름, 해결 방법 은 다른 thread 로 내 보 내 는 것 입 니 다.
차단 코드:
view plaincopy to clipboardprint?
01.Process p = Runtime.getRuntime().exec(cmd);
02.
03.p.waitFor();
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
해결 방법:
view plaincopy to clipboardprint?
01.Process p = Runtime.getRuntime().exec(cmd);
02.
03.StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");
04.
05. // kick off stderr
06. errorGobbler.start();
07.
08. StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");
09. // kick off stdout
10. outGobbler.start();
11.
12.p.waitFor();
Process p = Runtime.getRuntime().exec(cmd);
StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");
// kick off stderr
errorGobbler.start();
StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");
// kick off stdout
outGobbler.start();
p.waitFor();
그 중에서 StreamGobbler 류 의 코드:
view plaincopy to clipboardprint?
01.package com.sdc.callmaxent.socket;
02.
03.import java.io.BufferedReader;
04.import java.io.IOException;
05.import java.io.InputStream;
06.import java.io.InputStreamReader;
07.import java.io.OutputStream;
08.import java.io.PrintWriter;
09.
10.import com.sdc.callmaxent.util.FileUtil;
11.
12./**
13. * Runtime.getRuntime().exec
14. * @author shaojing
15. *
16. */
17.public class StreamGobbler extends Thread {
18. InputStream is;
19. String type;
20. OutputStream os;
21.
22. StreamGobbler(InputStream is, String type) {
23. this(is, type, null);
24. }
25.
26. StreamGobbler(InputStream is, String type, OutputStream redirect) {
27. this.is = is;
28. this.type = type;
29. this.os = redirect;
30. }
31.
32. public void run() {
33. InputStreamReader isr = null;
34. BufferedReader br = null;
35. PrintWriter pw = null;
36. try {
37. if (os != null)
38. pw = new PrintWriter(os);
39.
40. isr = new InputStreamReader(is);
41. br = new BufferedReader(isr);
42. String line=null;
43. while ( (line = br.readLine()) != null) {
44. if (pw != null)
45. pw.println(line);
46. System.out.println(type + ">" + line);
47. }
48.
49. if (pw != null)
50. pw.flush();
51. } catch (IOException ioe) {
52. ioe.printStackTrace();
53. } finally{
54. FileUtil.close(pw);
55. FileUtil.close(br);
56. FileUtil.close(isr);
57. }
58. }
59.}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
httpRunTime web.config 속성ASP.NET는 어플리케이션에 대한 최대 요청 수를 정렬합니다.요청을 처리할 충분한 자유 루트가 없을 때, 요청을 줄을 서게 됩니다.대기열이 이 설정에서 지정한 제한을 초과하면'503 - 서버가 너무 바쁩니다'오류 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.