이번 글은 CALL과 START의 차이점에 대한 포스팅이다.
회사프로젝트의 소스가 빌드가 무척 오래 걸리기 때문에 윈도우 작업 스케줄러로 매일 출근시간에 맞춰 빌드 후 IDE와 기타 필요한 프로그램들도 자동으로 다 띄워져 있도록 하고 있다.
추가로 셀레늄과 curl로 랜더링에 시간이 걸리는 페이지들도 접속해서 미리 캐시까지 생성하도록 해두기 때문에 그야말로 커피한잔 들고 PC에 로그인만 하면 바로 일에 몰입할 수 있는 상태가 된다 ^^
그런데 전날 빌드 배치파일을 좀 고쳤더니 오늘따라 준비 작업이 완료되지 않아 원인분석을 해보니 배치파일에 사용한 call과 start 명령어가 하는 역할이 달라서 였다.
call
- 순차실행 (앞의 프로그램이 끝나야 다음 프로그램 시작)
- 변수반환(동일한 CMD창에서 실행되므로 변수에 엑세스 가능)
start
- 동시실행 (별도의 창으로 실행하므로 거의 동시에 주루룩 실행됨)
- 변수반환 불가 (별도의 CMD창에서 실행되므로 부모창에 변수반환 불가. 단, 부모창에서 실행시킬 프로그램으로 인자 전달은 가능)
내 경우 종료되지 않는 프로그램을 call로 호출했기 때문에 그 시점에서 배치의 실행이 멈춰버린 것이다. start를 쓸 자리에 call을 썼기 때문인데 start로 수정하니 문제가 사라졌다.
단순히 프로그램을 실행만 시키면 되고 리턴값을 받을 필요가 없을 경우는 start를 쓰고 순차적으로 실행(앞의 프로그램 종료 후 다음 프로그램 실행)시켜야 하면 call또는 start에 /wait 옵션을 줘서 쓰고 순차적으로 실행해야 하면서 실행시킨 프로그램에서 뭔가 값을 받아야 한다면 call을 사용하면 된다.
스택 오버플로우에 좀 더 자세한 설명이 있으니 참고
One thought on “CALL과 START의 차이점 (도스배치, Windows CLI)”