Runtime.exec()를 사용할 때, 프로세스를 제때 죽여야 할 필요가 있다.
다음과 같이 구현하기는 했는데.. 아직 100% 보장은 못하겠다.
(인위적으로 프로세스 오류를 발생시키기가 힘들군)
응답없이 멈춰 버리면 대책이 없다.
Process p = Runtime.exec(....);
p.waitFor();
// process의 exit여부를 확인해서 log를 남긴다.
BufferedReader reader;
if (p.exitValue () != 0)
{
reader = new BufferedReader (new InputStreamReader (p.getErrorStream ()));
while (reader.ready())
logger.error ("[error]="+reader.readLine ());
// 죽인다.
p.destroy();
throw new Exception();
}
(인위적으로 프로세스 오류를 발생시키기가 힘들군)
Process p = Runtime.exec(....);
p.waitFor();
// process의 exit여부를 확인해서 log를 남긴다.
BufferedReader reader;
if (p.exitValue () != 0)
{
reader = new BufferedReader (new InputStreamReader (p.getErrorStream ()));
while (reader.ready())
logger.error ("[error]="+reader.readLine ());
// 죽인다.
p.destroy();
throw new Exception();
}



덧글
conanoc 2007/07/05 16:19 # 답글
코드가 좀 이상한데요? 프로세스가 비정상 종료되면 이걸 다시 죽인다?(이미 비정상 종료로 죽은 것인데)
icehan 2007/07/10 10:23 # 답글
음.. 비정상 종료가 아니라 응답없음을 처리하려고 했습니다.그런데, p.waitFor(); 에서 계속 기다리게 될 테니, 이 코드로는 처리가 안될 것 같습니다.
따로 이놈을 감시하는 Thread를 만들어야 할지.. 고민중(이라기 보다는 약간 뒤로 미뤄두었죠)