[Java 에러원인] java.lang.InterruptedException

Interrupted가 발생했다는 것은 먼가에 가로막혀 멈춰있는 상태를 뜻한다. 

 

 

그러면 아래를 보고 에러원인을 파악해보자.

 

로그

java.lang.InterruptedException

       at java.lang.ProcessImpl.waitFor(Native Method)

 

코드

java.lang.Process process = Runtime.getRuntime().exec( 시스템명령어 ); 
int returnValue = process.waitFor();
 

 

Runtime.getRuntime().exec() 함수는 다른 프로세스에서 시스템명령어를 실행시키는 함수이다. 

설명:Executes the specified string command in a separate process. 

 

프로세스는 함수라고 생각하면 된다. 함수의 특징은 함수하나가 끝나고 나서 다른 함수를 실행하는건데 여러개의 함수를 동시에 처리하는것처럼 실행할수 있다. 그 개념이 바로 쓰레드 인데. 하나의 프로세스 안에서 프로세스가 여러개 동시에 처리될때 그 프로세스들을 쓰레드라고 부른다.

 

그러면 코드에서 Runtime.getRuntime().exec() 는 쓰레드 하나를 추가해서 시스템 명령어를 처리하는 것이고.

process.waitFor()함수는 위 쓰레드가 실행될때 다른 쓰레드가 실행되지 않도록 다 끝날때까지 기다리게 하는것이다.

 

그래서 InterruptedException 에러는 왜 발생했는가 정리하자면

프로세스안에서 또다른 프로세스가 생길수 있다는건 부모자식 관계가 성립된다는것이다.

 

프로세스 관계는 크게  "H/W -> OS -> 프로세스 -> 프로세스 안에서 생긴 쓰레드" 이렇게 볼수 있는데 

 

자식 프로세스가 죽었을 경우에는 부모 프로세스가 죽지 않지만 부모 프로세스가 죽었을 경우에는 자식 프로세스가 죽는다. 쉽게 생각해서 OS자체가 갑자기 나갔을 경우에 OS안에서 돌아가는 모든 프로세스가 중지되는걸 생각하면 된다.

 

InterruptedException 에러는 한창 작업중인 프로세스의 부모 프로세스가 갑자기 죽어버려서 멈춰서 발생한 것이다.

 

댓글

Designed by JB FACTORY