특정 애플리케이션이 종료될 때까지 기다린 후 다른 애플리케이션을 시작하세요.

StackOverflow https://stackoverflow.com//questions/24018890

  •  21-12-2019
  •  | 
  •  

문제

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로 구현하는 것은 매우 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top