특정 애플리케이션이 종료될 때까지 기다린 후 다른 애플리케이션을 시작하세요.
문제
OS X에서 전체 .app 경로로 지정된 특정 응용 프로그램이 종료될 때까지 기다린 다음 다른 응용 프로그램을 시작하는 osascript 명령을 실행하고 싶습니다.사용하여 /usr/bin/open -n /Applications/MyApp.app
.
응용 프로그램이 종료될 때까지 기다리는 방법은 무엇입니까?
해결책
일반적인 접근 방식은 대기 루프를 수행하는 것입니다. 예를 들어 pgrep
:
while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done
불행하게도 이렇게 하면 너무 많이 잠자기 상태가 되어 다른 응용 프로그램의 시작이 지연됩니다.
또는 애플리케이션이 실행 중임을 알고 있는 경우 다음을 사용할 수 있습니다. /usr/bin/open
:
open -g -W /Applications/TextEdit.app
불행하게도 애플리케이션이 실행되고 있지 않은 경우 애플리케이션이 열립니다.전화하기 전에 실행 중인지 확인할 수 있습니다. /usr/bin/open
, 그러나 이것은 원자적이지 않습니다.닫히는 중일 수 있으며 open 명령으로 다시 시작할 수 있습니다.
둘 다 osascript로 캡슐화할 수 있습니다(비록 별로 의미가 없을 수도 있지만).
osascript -e 'do shell script "while pgrep -f /Applications/TextEdit.app 2>/dev/null ; do sleep 1.0 ; done"'
osascript -e 'do shell script "open -g -W /Applications/TextEdit.app"'
참고 사항: open -W
실제로 프로세스에서 kqueue 대기(비폴링 대기)를 수행합니다.kqueue를 호출하고 애플리케이션을 다시 시작할 위험 없이 동일한 작업을 수행하는 다른 명령이 있을 수 있습니다.C로 구현하는 것은 매우 쉽습니다.
제휴하지 않습니다 StackOverflow