exec로 외부 프로그램 실행 중 TK GUI update 하는 방법이 있을까요?

현재 Linux에서 TK program을 만들어 보는 중입니다.

proc run_func { } {
~~~~
foreach ~~~ {
if [catch { exec ooooo.oo } msg] {
## log file 생성 후 오류 내용을 저장
## main으로 return
}

if { stop 버튼 눌렀졌나? } { return }
}
~~~~
}

run 버튼을 클릭하면 run_func proc을 실행하여 외부 프로그램을 실행하게 되는데
외부 프로그램이 한번 실행될 때 대략 2~3분 정도를 돕니다.
그리고 stop을 버튼을 클릭하여 실행되고 있는 외부 프로그램이 끝나고 새로운 loop를 돌 때 종료시키려고 합니다.

그런데 문제는 외부 프로그램이 실행되고 있는 중에는 GUI가 update가 안되서 버튼 클릭되는 에니메이션?? 이 실행되지 않고 외부 프로그램이 종료된 다음 버튼 눌러지는 모양을 볼 수가 있습니다.

외부 프로그램이 실행되는 중에도 stop 버튼이 눌러지는 모양을 update 하는 방법이 있나요???

아니면...
exec를 background로 실행되도록 &를 붙여서 사용해 보려고도 했지만...
&를 붙이니깐 catch가 실행되지 않고 넘어가버리더라구요.
while 을 사용해서 외부 프로그램의 출력물이 생겼나 안 생겼나 마냥 after를 써서 기다리는 방법이 별로 인 거 같고..
background로 외부 프로그램을 기다리다가 exec가 끝나면 바로 확인해서 오류가 생겼서 끝났는지 제대로 끝났는 지 확인할 수 있는 방법이 있을까요??