java 외부 프로세스 생성해서 실행시 wiatFor()사용시 block되는 현상
소라
liststring cmd = new arrayliststring();
cmd.add(cmd.exe);
cmd.add(/c);
cmd.add(c:/windows/microsoft.net/framework/v3.5/msbuild.exe d:\\msbuild\\edenworld\\edenworld\\edenworld.vcproj);
processbuilder test = new processbuilder(cmd);
try {
process p = test.start();
//p.waitfor(); //왜 여기서 계속 block 되는건지 ㅡㅡ...이것 주석하면 잘 돌아갑니다.
p.getinputstream();
bufferedreader br = new bufferedreader (new inputstreamreader(p.getinputstream()));
string line = null;
while ( (line = br.readline() ) != null)
{
system.out.println( + line);
if (line.contains(succeeded))
{
system.out.println(성공);
break;
}
}
지금 하는 작업이 msbuild로 프로젝트를 빌드한다음에 빌드의 성공유부를 판단하기 위함이구요
processbuilder 이용해서 msbuild를 실행시켰습니다. 그런데 ............
외부프로세스를 띄운다음에 그 빌드가 끝날 때까지 기다리기 위해서 waitfor()함수를 썼는데 ... 멈춰버립니다.
waitfor()에서 멈춰버리더군여 ...
waitfor()지우면 빌드됩니다. 근데 만약 빌드하는데 엄청 오래걸린다고하면 그것이 완료될때 까지 기다려야 할 텐데요 ..
(지금은 빌드가 오래 안걸려서 그 프로세스로 부터 나온 결과를 얻었지만.... )
waitfor()하면 왜 block되나요 .......... (물론 block되는게 맞지만 프로세스가 끝나면 block 된게 풀어져야 하지 않습니까??)
제가 api를 제대로 이해하지 못해서 그런건지 ...
제 마음대로 상상해 보면 외부프로세스.waitfor()가 현재 프로세스 끝날 떄까지 (외부프로세스가 아니라 ㅡㅡ..) 기다리는건지
멈출이유가 없는데 말입니다....
-
핫팬츠
자답 : ㅡㅡㅋ cmd창으로 계속 열려서 종료가 안되는군요 .....